一、docker部署nginx
1、拉取nginx鏡像
docker pull nginx
2、創建nginx組態檔存放位置,如:
/Users/******/Documents/test_flod/docker/nginx/conf #存放組態檔
/Users/******/Documents/test_flod/docker/nginx/data #存放日志檔案
3、使用鏡像運行test_nginx容器,這里坑比較大,要一步一步做,首先docker的檔案映射是宿主機檔案覆寫容器檔案,而且如果沒有創建default.conf和nginx.conf,docker 會創建名為default.conf的檔案夾并與容器內的default.conf檔案映射,此時會報錯,所以首先創建并得到兩個原始組態檔(如果宿主機的組態檔是空白,會將容器的組態檔也覆寫為空白),因此運行一個test_nginx容器,
docker run --name test_nginx -d nginx
4、復制組態檔,并確保組態檔被正確復制
#復制default.conf
docker cp test_nginx:/etc/nginx/conf.d/default.conf /Users/*******/Documents/test_flod/docker/nginx/conf
#復制nginx.conf
docker cp test_nginx:/etc/nginx/nginx.conf /Users/******/Documents/test_flod/docker/nginx/conf

5、 啟動nginx服務,這里如果還是報錯,一般有兩種情況:1)映射用的宿主機埠被占用,比如80埠會被微信占用,此時換一個埠映射即可,2)組態檔路徑不對或沒有組態檔,此時需要確保檔案映射路徑正確
docker run --name nginx -d -p 80:80 -it --privileged -v /Users/******/Documents/test_flod/docker/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:ro -v /Users/******/Documents/test_flod/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /Users/******/Documents/test_flod/docker/nginx/data/:/var/log/nginx nginx
二、使用docker部署兩臺tomcat
1、拉取tomcat鏡像,我用的是9.0.52
docker pull tomcat:9.0.52
2、使用tomcat鏡像生成兩個tomcat容器,分別映射不同的埠,注意需要映射出來webapps目錄
docker run -d -p 8081:8080 -v /Users/******/Documents/test_flod/docker/tomcat01:/usr/local/tomcat/webapps --name tomcat01 tomcat:9.0.52
docker run -d -p 8082:8080 -v /Users/******/Documents/test_flod/docker/tomcat02:/usr/local/tomcat/webapps --name tomcat02 tomcat:9.0.52
3、tomcat的官方鏡像已經幫我們考慮到了檔案映射的問題,因此在/usr/local/tomcat目錄下還有一個webapps.dist目錄,里面的檔案和webapps的檔案相同,因此需要分別進入到兩個tomcat檔案中,將webapps.dist中的檔案復制到webapps中
# 復制tomcat01的檔案
docker exec -it tomcat01 /bin/bash
cd webapps.dist
cp -r * ../webapps
exit
# 復制tomcat02的檔案
docker exec -it tomcat02 /bin/bash
cd webapps.dist
cp -r * ../webapps
exit
4、此時訪問localhost:8081和localhost:8082,看見了熟悉的tomcat界面,至此nginx和tomcat的部署完成,
三、修改nginx組態檔實作反向代理和負載均衡
1、實作反向代理,需要修改default.conf檔案,如下,做了兩個反向代理,訪問http://localhost/a會跳轉到tomcat01,訪問http://localhost/b會跳轉到tomcat02,修改配置后需要重啟nginx
server {
listen 80;
listen [::]:80;
server_name localhost;
location /a/ {
#ip為docker分配的ip,也可以填寫localhost:8081
proxy_pass http://172.17.0.3:8080/;
}
location /b/ {
#ip為docker分配的ip,也可以填寫localhost:8082
proxy_pass http://172.17.0.4:8080/;
}
}
docker restart nginx

2、實作負載均衡,需要同時修改default.conf檔案和nginx.conf檔案,首先修改nginx.conf檔案,在http塊中添加如下配置,需要注意的是upstream配置必須在nginx.conf的http配置塊中,如果寫到default.conf中nginx會報錯,weight為負均衡的權重,此處表示分發至兩個tomcat的請求比例為1:1,修改配置后需要重啟nginx
upstream tomcat{
server 172.17.0.3:8080 weight=1;
server 172.17.0.4:8080 weight=1;
}

3、在default中添加配置,訪問localhost時自動將請求分發至tomcat01和tomcat02
location / {
proxy_pass http://tomcat;
}
4、重啟nginx容器,將配置生效
docker restart nginx
5、測驗負載均衡

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293568.html
標籤:其他

