1 第一步:html
使用 docker pull nginx將nginx的鏡像從倉庫下載下來。java
2 第二步使用鏡像文件建立nginx容器:mysql
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
會出現錯誤:linux
[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 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\\\"\"" : 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容器。換一種思路。nginx
1 使用命令:web
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/logs:/wwwlogs -d nginx
成功啓動這一次沒有掛載nginx.con配置文件。redis
2 而後使用以下命令進入交互式終端:sql
docker exec -it mynginx /bin/bash
3 而後使用以下命令找到nginx.conf 配置文件。docker
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.tomcat
注意: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> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 8 bytes 648 (648.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8 bytes 648 (648.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 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負載均衡配置以下:
upstream cetc{ ip_hash; server 172.17.0.2:8080; } server { listen 80; server_name 10.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_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; 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地址的方法。。。