提前先准备好一个干净的lnmp环境,一键安装lnmp:https://lnmp.org/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.com/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.com”]
}
保存后依次执行: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.net/article/218747.htm
https://blog.csdn.net/UserPHP/article/details/100728267
docker + 负载,参考:
https://blog.csdn.net/weixin_41515615/article/details/81351006
https://blog.csdn.net/yinjinshui/article/details/101352012
https://blog.csdn.net/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