Docker安装nginx以及负载均衡

释放双眼,带上耳机,听听看~!

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

一:第一次

1 第一步:

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

2 第二步使用镜像文件创建nginx容器:


1
2
1docker 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
2

会出现错误:


1
2
3
4
5
1[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  
213bdd883e2d3854231ea92aee362592d2b3cfefbd5b71b7001a4289ddeb57470
3/usr/bin/docker-current: Error response from 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\\\"\""
4: 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.
5

使用 docker rm myginx删除mynginx容器。换一种思路。

二:第二次

1 使用命令:


1
2
1docker run -p 80:80 --name mynginx -v $PWD/www:/www  -v $PWD/logs:/wwwlogs  -d nginx
2

成功启动这一次没有挂载nginx.con配置文件。

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

?

1 docker exec -it mynginx /bin/bash

1
1

3 然后使用如下命令找到nginx.conf 配置文件。


1
2
3
4
1root@95e2b70fdf49:/# cd /etc/nginx/
2root@95e2b70fdf49:/etc/nginx# ls
3conf.d    fastcgi_params    koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params    uwsgi_params  win-utf
4

4 最后使用exit命令退出交互式终端,使用如下命令进行配置文件的拷贝,将其粘贴到/root/conf/nginx.con.

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

b ) 95e2b70fdf49与上面的root@95e2b70fdf49要对应。


1
2
1docker cp 95e2b70fdf49:/etc/nginx/nginx.conf $PWD/conf/nginx.conf #使用id或names【mynginx】
2

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

 


1
2
1docker 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
2

成功开启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已经安装过。

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1[root@bogon conf]# docker exec -it mytomcat /bin/bash
2root@4a33248aba7c:/usr/local/tomcat# ls
3LICENSE  NOTICE  RELEASE-NOTES    RUNNING.txt  bin  conf    include  lib  logs  native-jni-lib  temp  usr  webapps    work
4root@4a33248aba7c:/usr/local/tomcat# cd webapps/
5root@4a33248aba7c:/usr/local/tomcat/webapps# ls
6ROOT  docs  examples  host-manager  manager  wlsweb
7root@4a33248aba7c:/usr/local/tomcat/webapps# ifconfig
8eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
9        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
10        inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>
11        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
12        RX packets 8  bytes 648 (648.0 B)
13        RX errors 0  dropped 0  overruns 0  frame 0
14        TX packets 8  bytes 648 (648.0 B)
15        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
16
17

lo: flags=
73<UP,LOOPBACK,RUNNING> mtu
65536
inet
127.0.
0.1 netmask
255.0.
0.0
inet6 ::
1 prefixlen
128 scopeid
0x10<host>
loop txqueuelen
1
(Local Loopback)
RX packets
0 bytes
0 (
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负载均衡配置如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1upstream cetc{
2    ip_hash;
3      server  172.17.0.2:8080;
4    }
5    server {
6        listen       80;
7        server_name  10.23.57.129;
8    location / {
9        proxy_pass http://cetc;
10        proxy_set_header        Host $host;
11        proxy_set_header        X-Real-IP $remote_addr;
12        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
13        client_max_body_size    10m;
14        client_body_buffer_size 128k;
15        proxy_connect_timeout   300;
16        proxy_send_timeout      300;
17        proxy_read_timeout      300;
18        proxy_buffer_size       4k;
19        proxy_buffers           4 32k;
20        proxy_busy_buffers_size 64k;
21        proxy_temp_file_write_size 64k;
22        add_header Access-Control-Allow-Origin *;
23        index index.jsp index.html index.htm;
24        rewrite ^/$ /wlsweb;        
25           }
26     }
27

上面两个红色标记处ip应该对应。使用docker restart nginx重启nginx ,访问测试成功。

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

安静男孩

标签: Docker

好文要顶 关注我 收藏该文

PeaceGuy
关注 – 15
粉丝 – 2

+加关注

0

0

« 上一篇:tomcat 403错误和ls: cannot open directory '.': Permission denied
» 下一篇:el和jstl


1
2
3
4
5
6
7
1   &lt;/div&gt;
2   &lt;p class=&quot;postfoot&quot;&gt;
3       posted on &lt;span id=&quot;post-date&quot;&gt;2018-04-18 11:48&lt;/span&gt; &lt;a href=&quot;https://www.cnblogs.com/xishaohui/&quot;&gt;PeaceGuy&lt;/a&gt; 阅读(&lt;span id=&quot;post_view_count&quot;&gt;3437&lt;/span&gt;) 评论(&lt;span id=&quot;post_comment_count&quot;&gt;0&lt;/span&gt;)  &lt;a href=&quot;https://i.cnblogs.com/EditPosts.aspx?postid=8871994&quot; rel=&quot;nofollow&quot;&gt;编辑&lt;/a&gt; &lt;a href=&quot;#&quot; onclick=&quot;AddToWz(8871994);return false;&quot;&gt;收藏&lt;/a&gt;
4   &lt;/p&gt;
5&lt;/div&gt;
6
7

给TA打赏
共{{data.count}}人
人已打赏
安全经验

英文站如何做Google Adsense

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索