官方镜像仓库:
NginxPHPMySQL一、MySQL:
### 指定版本 docker pull mysql:5.6 ### 创建mysql容器 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql_password -d mysql:5.6二、Nginx:
### 指定版本 docker pull nginx:1.18 ### 创建容器(基础容器) docker run --name nginx -p 80:80 -d nginx:1.18 ### 默认情况下,Docker nginx服务器的HTML路径(网站根目录)在容器 /usr/share/nginx/html 目录下 ### 项目、nginx配置文件持久化 ### 映射容器内根目录至本地服务器 docker run --name nginx -p 80:80 -d -v /本地服务器项目目录/:/usr/share/nginx/html nginx:1.18 ### 映射nginx的配置文件 cd /home/nginx ### 拷贝容器nginx内配置文件至本地服务器当前目录 docker cp nginx:/etc/nginx/conf.d/default.conf default.conf三、PHP:
### 指定版本 docker pull php:7.4 ### 创建初始容器 docker run --name php -p 9000:9000 -d php:fpm ### 拷贝配置文件 cd /home/www/php docker cp php:/usr/local/etc/php-fpm.d/www.conf www.conf docker cp php:/usr/local/etc/php/php.ini-production php.ini ### 修改配置 vi /home/www/php/phh.ini ### 设置cgi.fix_pathinfo=1(需先删除前面的;注释符)四、重要的步骤!重要的步骤!重要的步骤!重复三遍
### 链接不同的容器,使其可相关通讯和协作 ### 先清除原nginx、php容器 docker stop php && docker rm php docker stop nginx && docker rm nginx ### 创建php容器 docker run --privileged --name php -p 9000:9000 --link mysql:mysql -v /home/www/web:/var/www/html -v /home/www/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /home/www/php/php.ini:/usr/local/etc/php/php.ini -d php:fpm ### 创建nginx容器 #### 修改nginx配置 参考下图详细配置信息 ### 生成容器 docker run --privileged --name nginx -p 80:80 --link php:fpm -v /home/www/web:/usr/share/nginx/html -v /home/www//nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx:1.18无、注意事项
### 1:如果因为系统防火墙关闭或开启,导致容器创建失败:docker0: iptables: No chain/target/match by that name ### 解决方案: ### 重启docker守护进程即可 service docker restart ### 2:如果构建容器后出现Existe(1) ### 解决方案: ### 删除该容器,重新创建容器可加 --privileged 参数 docker run --privileged --name nginx [imagename]:[版本] -d [容器别名] ### 3: 构建完成后出现无法解析php文件时,请注意检查自己的nginx配置项 ### 解决方案: nginx配置: server { ... root /nginx容器内根目录[一般默认/usr/share/nginx/html]/ ... location / { //自定义的转发规则 } ... localtion ~ \.php$ { root /[php容器根目录,默认/var/www/html]/; fastcgi_pass [php(php容器名称)]:9000; ... ####### [空白处] ####### # 修改如下 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 若修改为上述后还是为解决,可将下一行(即include ...)移至上述标记空白处即可 include fastcgi_params; } ... }