Docker安装nginx以及负载均衡 <http://www.cnblogs.com/xishaohui/p/8871994.html>

首先在linux系统中新建一个data文件夹进行nginx容器的创建--即为:mkdir data。

一:第一次

1 第一步:

使用 docker pull nginx将nginx的镜像从仓库下载下来。

2 第二步使用镜像文件创建nginx容器:
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v
$PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx
会出现错误:
<>[root@bogon overlay2]# docker run -p 80:80 --name mynginx -v $PWD/www:/www
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx
13bdd883e2d3854231ea92aee362592d2b3cfefbd5b71b7001a4289ddeb57470
/usr/bin/docker-current: Error responsefrom daemon: oci runtime error:
container_linux.go:247: starting container process caused "
process_linux.go:364: container init caused \"rootfs_linux.go:54: mounting
\\\"/var/lib/docker/overlay2/conf/nginx.conf\\\" to rootfs
\\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged\\\"
at
\\\"/var/lib/docker/overlay2/e7f9d2c6c6b5ea9b3d494e2a4031218acd5c0ccce5225faab2b851d657eedfd6/merged/etc/nginx/nginx.conf\\\"
caused \\\"not a directory\\\"\"" : Are you trying to mount a directory onto a
file (or vice-versa)? Check if the specified host path exists and is the
expected type. <>
使用 docker rm myginx删除mynginx容器。换一种思路。

二:第二次

1 使用命令:
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/logs:/wwwlogs -d
nginx
成功启动这一次没有挂载nginx.con配置文件。

2 然后使用如下命令进入交互式终端:

1docker exec -it mynginx /bin/bash
3 然后使用如下命令找到nginx.conf 配置文件。
root@95e2b70fdf49:/# cd /etc/nginx/ root@95e2b70fdf49:/etc/nginx# ls conf.d
fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params
uwsgi_params win-utf
4 最后使用exit命令退出交互式终端,使用如下命令进行配置文件的拷贝,将其粘贴到/root/conf/nginx.con.

注意:a )最后加/就是文件夹,不加/就是文件如下命令所示,前面的nginx.conf 和后面的nginx.conf 都是文件,所以没有以/结尾。

   b ) 95e2b70fdf49与上面的root@95e2b70fdf49要对应。
docker cp 95e2b70fdf49:/etc/nginx/nginx.conf $PWD/conf/nginx.conf
#使用id或names【mynginx】

此时已经成功配置使用ip+80端口即可访问。但是在修改/root/conf/nginx.conf文件实现负载均衡的时候不起作用。你就发现还没完成任务需要使用docker
rm mynginx重新删除nginx容器,再次使用第一次使用的命令重新新建nginx容器:

 
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v
$PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx

成功开启nginx服务。使用ip+80端口成功访问,修改/root/conf/nginx.conf配置文件即可生效。可以进行配置负载均衡。注意负载均衡的配置中容器中的ip地址。

 三 、负载均衡


注意:如果是在部署服务器的时候在nginx.conf配置文件直接配置内网ip+端口号即可,但是如果是在一个虚拟机上安装一个linux操作系统自行测试的时候,需要使用命令docker
exec -it tomcat /bin/bash 进入tomcat容器交互式终端,使用ifconfig查看ip端口,然后在配置文件进行指定。

详细解释:

1)自己购买的云服务器端配置:


  首先有负载均衡服务器、应用1服务器、应用2服务器三台服务器,因为三个服务器在一个相同的局域网内直接在nginx配置文件中使用内网ip+端口号即可指定,执行过程如下:

  负载均衡请求--》应用1或2服务器主机ip+端口--》自动映射到docker里面的tomcat容器的端口。

2)自己在虚拟机创建一个linux主机。


  首先在一个主机上使用docker创建nginx和多个tomcat容器【不同端口号】,多个容器【tomcat、mysql、redis。nginx等】是在一个内部同一个局域网,

  在此时配置的时候需要指定的是tomcat容器内部的ip地址。使用docker exec -it tomcat /bin/bash
进入tomcat容器交互式终端,使用ifconfig查看ip端口,但是会提示在此容器不能使用ifconfig命令,需要使用apt-get install
net-tools 、apt-get update、apt-get install
net-tools【依次使用】命令下载安装。然后再是inconfig可以查看到ip地址,最后直接在配置文件直接指定即可。命令如下,我的ifconfig已经安装过。

 
<>[root@bogon conf]# docker exec -it mytomcat /bin/bash root@4a33248aba7c:
/usr/local/tomcat# ls LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf include
lib logs native-jni-lib temp usr webapps work root@4a33248aba7c:
/usr/local/tomcat# cd webapps/ root@4a33248aba7c:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager wlsweb root@4a33248aba7c:
/usr/local/tomcat/webapps# ifconfig eth0: flags=4163
<UP,BROADCAST,RUNNING,MULTICAST> mtu1500 inet 172.17.0.2 netmask 255.255.0.0
broadcast0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 8 bytes 648 (648.0 B)
RX errors0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX
errors0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73
<UP,LOOPBACK,RUNNING> mtu65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1
prefixlen128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 0
bytes0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (
0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 <>
nginx.conf负载均衡配置如下:
<> upstream cetc{ ip_hash;   server 172.17.0.2:8080; } server { listen 80;
server_name10.23.57.129; location / { proxy_pass http://cetc; proxy_set_header
Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X
-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m;
client_body_buffer_size 128k; proxy_connect_timeout300; proxy_send_timeout 300;
proxy_read_timeout300; proxy_buffer_size 4k; proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; add_header Access
-Control-Allow-Origin *; index index.jsp index.html index.htm; rewrite ^/$ /
wlsweb; } } <>
上面两个红色标记处ip应该对应。使用docker restart nginx重启nginx ,访问测试成功。


最后注意:在自己的虚拟机上玩,每次重新打开linux运行docker各个容器的时候ip地址会随机变化,所以很可能是你之前配置的ip没有对应上,测试nginx会出现nginx
502 bad gateway,还没有找到固定容器ip地址的方法。。。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信