基於Docker構建上百臺Nginx、Tomcat
1、啟動Nginx
docker pull docker.io/nginx
docker run -itd --privileged -p 80:80 nginx
登入網址http://localhost:80,成功返回頁面
2、批量啟動10Tomcat
for i in `seq -w 1 10`;do docker run -itd --privileged --name="Tomcat$i" tomcat;done
3、修改Nginx配置
①獲取所有tomcat 容器的IP
docker inspect $(docker ps | awk '/Tomcat/ {print $1}') | grep -i ipadd | grep -oE '([0-9]{1,3}\.){3}[0-9]'|uniq|sort
②獲取Nginx 負載均衡配置模板
docker inspect $(docker ps | awk '/Tomcat/ {print $1}') | grep -i ipadd | grep -oE '([0-9]{1,3}\.){3}[0-9]'|uniq|sort|awk '{print "server "$0":8080 weight=100 max_fails=2 fail_timeout=15;"}'
③更新/etc/nginx/conf.d/default.conf
cat>/etc/nginx/conf.d/default.conf<<EOF upstream tomcat { server 10.10.10.1:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.2:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.4:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.5:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.6:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.7:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.8:8080 weight=100 max_fails=2 fail_timeout=15; server 10.10.10.9:8080 weight=100 max_fails=2 fail_timeout=15; } server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://tomcat; } #error_page 404 /404.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; } } EOF
檢查nginx語法nginx -t,然後重啟容器的nginx程序nginx -s reload
解決問題:
1、Tomcat 啟動後在網頁訪問時提示拒絕
排查了防火牆、程序,發現Tomcat的程序根本沒有起來,原因是啟動Tomcat的命令用了:docker run -itd --privileged tomcat:latest bash
多加了一個bash,讓tomcat程序沒有起來
2、Tomcat啟動後提示404
使用docker安裝了tomcat映象,預設為latest最新的(8.5.50版本),依據tomcat映象建立容器並同時做了埠對映
命令為:docker run --name tomcat01 -d -p 8083:8080 tomcat
用的是阿里雲的雲伺服器,防火牆也開了埠,在瀏覽器中訪問,http://112.74.40.14:8083/ 提示如下介面
提示資源未找到,這就出現了tomcat容器正常執行但是無法訪問到tomcat首頁的問題,其實這並不是我們映象或者容器的問題,只是這個版本的tomcat開發者不知道怎麼想的,在webapps下是空的,所以訪問不到首頁,後來換成8.0.52版本就可以了。新版本中,原本應該在webapps中的檔案,被放在了webapps.list中,只要把檔案放回原位,也可以解決這個問題。