尝试用 docker 模拟负载均衡完整版(踩着石头过河)
我的环境:Ubuntu 16.04.4、Docker version 18.06.1-ce、docker-compose version 1.18.0、git version 2.7.4
工作目录统一在/wwwroot下
1、先创建一个用来做负载均衡nginx
进入/wwwroot创建nginx目录
进入nginx目录docker pull nginx:alpine
docker run -it --name testnginx -p 80:80 -d nginx:alpine
把里面的默认文件copy出来nginx.confdocker cp testnginx:/etc/nginx/nginx.conf nginx.conf
docker rm -f testnginx
重新运行一个容器
docker run -p 80:80 --name nginx -v $PWD/conf.d:/etc/nginx/conf.d -v $PWD/nginx.conf:/etc/nginx/nginx.conf -d nginx:alpine
进入nginx目录下的conf.d目录创建default.conf
server {
listen 80;
server_name localhost;
root /www;
index index.php index.html index.htm;
location / {
}
}
加入如上配置
进入 nginx目录下的www目录 新建index.html 加入"welcome to nginx!"
重启nginx 容器 docker restart nginx
然后访问你的地址
2、克隆一套nginx+php+mysql+redis环境(安装环境请参考博客:终于能用 Docker 搭建一套自己的环境了(dnmp))
git clone https://github.com/MichealJl/dnmp.git
3、进入目录dnmp(为了方便记忆将目录名改为dnmp1)
mv env-example .env
编辑docker-compose.yml文件 删除掉php5.6和gogs
为了快速安装,修改env文件将php的一些扩展 :swoole和IMAGEMAGICK置为false
修改env文件中nginx 对外暴露的端口为81 NGINX_HTTP_PORT=81
docker-compose up -d
进入 nginx的project目录创建index.php输出 phpinfo();
访问你的81端口
4、再复制2份dnmp 作为节点
cp -r dnmp1 dnmp2
现在的情况是这样
进入dnmp2和dnmp3修改env文件 将nginx、php、redis和mysql对外的端口修改一下不要相同即可
我是在之前的端口基础上挨个+1的
然后都执行docker-compose up -d
查看现在容器的运行情况
然后分别访问3个端口都会看到phpinfo
为了区分 分别修改project里的index.php文件
5、修改 /wwwroot/nginx/nginx.conf
再修改nginx目录下conf.d/default.conf
然后访问你的ip就会看到负载均衡的效果
6、加入laravel项目测试
1、分别进入三个节点对应的mysql容器
docker exec -it dnmp1_mysql_1 /bin/bash
docker exec -it dnmp2_mysql_1 /bin/bash
docker exec -it dnmp3_mysql_1 /bin/bash
登录mysql 创建测试数据 因为这里安装的是mysql8所以需要修改下root用户的密码认证方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
create database test;
use test;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'zhangsan');
INSERT INTO `user` VALUES ('2', 'lisi');
INSERT INTO `user` VALUES ('3', 'wangermazi');
flush privileges;
2、 分别进入三个节点对应的php容器
docker exec -it dnmp1_php-fpm72_1 /bin/bash
docker exec -it dnmp2_php-fpm72_1 /bin/bash
docker exec -it dnmp3_php-fpm72_1 /bin/bash
进入容器后 进入/www目录 然后安装 laravel
3、分别修改三个节点对应的nginx目录下的default.conf 指向laravel目录
4、然后重启三个节点的nginx
docker restart dnmp1_nginx_1
docker restart dnmp2_nginx_1
docker restart dnmp3_nginx_1
5、 在三个laravel项目中创建User控制器和模型
例:
docker exec dnmp1_php-fpm72_1 bash -c "cd /www/laravel/ && php artisan make:controller UserController"
docker exec dnmp1_php-fpm72_1 bash -c "cd /www/laravel/ && php artisan make:model Models/User"
后面两个请自行修改容器名称创建
6、 修改模型并在控制器中添加方法
模型中关联表名
在api里添加路由
7、修改.env文件中的DB参数
后边两个项目照样复制就行
效果如下
本作品采用《CC 协议》,转载必须注明作者和本文链接
结束的好突然
@Chasers9527 因为后面大部分都是相同的操作。。
不用keepalive?
@Jovem 额. 还没到那程度 我这刚开始练习.... 先实现 后面在研究研究
好好学习
@Chasers9527 正在踩坑中 :joy: