提前先准备好一个干净的lnmp环境,一键安装lnmp:https://lnmp/auto.html

配置前先安装好docker
1.安装
yum包更新到最新:yum update
安装需要的软件包:yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置yum源
yum-config-manager --add-repo https://download.docker/linux/centos/docker-ce.repo
3.安装docker,出现的提示都输入Y
yum install -y docker-ce
4.安装完成输入docker -v 查看版本
5.配置镜像加速:vi /etc/docker/daemon.json,可以参考菜鸟教程的docker镜像加速配置
复制下面内容到daemon.json中
{
“registry-mirrors”: [“https://g5ae7o25.mirror.aliyuncs”]
}
保存后依次执行:sudo systemctl daemon-reload 和 sudo systemctl restart docker

完场上述操作后,现在就开始配置
1、创建私有网络:docker network create lnmp
2、安装Nginx镜像:docker pull nginx:1.18.0
3、运行Nginx:

#创建并运行容器
docker run --name mynginx -p 8080:80 -v /root/docker/nginx/html:/usr/share/nginx/html -d nginx:1.18.0
 
#移动到配置目录
cd /root/docker/nginx
 
#复制配置文件:cd到/root/docker/nginx 文件夹下复制nginx配置文件目录
docker cp mynginx:/etc/nginx/conf.d conf.d
 
#停止容器
docker stop mynginx
 
#删除容器 
docker rm mynginx
 
#再次运行
docker run --name mynginx -p 8080:80 --network lnmp -v /root/docker/nginx/html:/usr/share/nginx/html -v  /root/docker/nginx/conf.d:/etc/nginx/conf.d/ -d nginx:1.18.0

测试:在Nginx站点根目录html目录下创建index.html文件,并写入文字:
echo “Nginx Server” >> /root/docker/nginx/html/index.html
浏览器访问主机地址 服务器ip:8080 显示 Nginx Server,则Nginx安装成功

4、安装MySQL镜像:docker pull mysql:5.7.35
5、创建并运行MySQL容器:
docker run --name mysql5.7 --network lnmp -v /root/docker/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql:5.7.35
6、安装PHP镜像:docker pull php:7.4-fpm
7、创建并运行PHP容器:

#运行镜像
docker run --name php7.4 --network lnmp -d php:7.4-fpm
 
#创建目录
mkdir -p /root/docker/php
 
#移动目录
cd /root/docker/php/
 
#复制www.conf
docker cp php7.4:/usr/local/etc/php-fpm.d/www.conf www.conf
 
#进入容器
docker exec -it php7.4 bash
 
#移动目录
cd /usr/src/
 
#解压文件
xz -d php.tar.xz
 
#解压文件
tar -xvf  php.tar
 
#退出镜像
exit
 
#复制php.ini,这里根据自己的centos系统本身安装的PHP版本来定义复制目录,例如本次操作使用的centos7 PHP版本是7.4.25的
docker cp php7.4:/usr/src/php-7.4.25/php.ini-production php.ini
 
#停止镜像
docker stop php7.4
 
#删除镜像
docker rm php7.4
 
#再次运行镜像
docker run --name php7.4 --network lnmp -v /root/docker/nginx/html:/var/www/html -v /root/docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /root/docker/php/php.ini:/usr/local/etc/php/php.ini -d php:7.4-fpm

8、编辑Nginx配置文件 vim /root/docker/nginx/conf.d目录下面的default.conf文件:

server {
    listen       80;
    server_name  _;
    root /usr/share/nginx/html;
    index index.html index.htm;
 
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
 
    location / {
        #root   /usr/share/nginx/html;
        #index  index.php index.html index.htm;
        try_files $uri $uri/ =404;
    }
 
    error_page  404  /404.html;
    location = /40x.html {
        root    /user/share/nginx/html;
    }
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html/;
        fastcgi_pass   php7.4:9000;
        fastcgi_index  index.php;
#        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 
    }
  # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

9、重新启动nginx容器:docker restart mynginx
测试:创建index.php文件:vim /root/docker/nginx/html/index.php,输入:

<?php
    phpinfo();

保存后,浏览器再次访问主机地址 服务器ip:8080 显示php信息,则PHP安装成功

docker的nginx负载

实践操作:安装以上的操作步骤3、再分别创建mynginx1 和 mynginx2 容器,注意修改步骤中的mynginx命名,以及/root/docker/nginx1和/root/docker/nginx2路径修改,然后再修改宿主机的nginx配置,我的安装路径是:/usr/local/nginx/conf/
http中添加如下:

upstream 192.168.2.195 {
        server 127.0.0.1:8081 weight=2;
        server 127.0.0.1:8082 weight=1;
        server 127.0.0.1:8080 weight=3;
    }

    server {
         listen 80;
         server_name 192.168.2.195;

         location /{
                proxy_pass http://192.168.2.195;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_http_version 1.1;
                proxy_set_header Connection "";
        }
    }

再重启宿主机的nginx,再次浏览器访问服务器ip,不需要端口即可访问到8080 8081 8082端口

docker + php 环境配置,参考:
https://www.jb51/article/218747.htm
https://blog.csdn/UserPHP/article/details/100728267

docker + 负载,参考:
https://blog.csdn/weixin_41515615/article/details/81351006
https://blog.csdn/yinjinshui/article/details/101352012
https://blog.csdn/weixin_39902184/article/details/110606615?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

更多推荐

Docker+PHP环境配置和负载