Docker系列学习 -- (二)多容器构建web基础环境(php+mysql+nginx)

    技术2022-07-11  101

    == 背景:CentOS7操作系统 ==

    官方镜像仓库:

    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; } ... }
    至此,我们就完成的相关系列的配置,正常运行php的项目了,如果修改本地nginx或这php的配置文件,最好重启一下相应容器:docker restart [容器名]。
    Processed: 0.012, SQL: 9