一、部署前后分離
使用你自己的自定義鏡像
部署多個副本
所有副本使用相同的配置和邏輯
Nginx 做反向代理統一入口
外部訪問形式如:
http://your-domain/api/xxx
1.1 建立私庫
鏡像已構建并推送到可訪問的鏡像倉庫
啟動 Docker Registry 容器
docker run -d -p 5000:5000 --restart=always --name registry registry:2
這會在本地啟動一個私有的 Docker Registry,并監聽 5000 端口。
配置 HTTPS 或者信任不安全的 Registry,可以通過以下方式讓 Docker 客戶端信任這個不安全的 Registry:
每個機器都要編輯 /etc/docker/daemon.json
文件(如果沒有則創建),添加如下內容:
{"insecure-registries" : ["【ip】:5000"]
}
每個機器都要,然后重啟 Docker 服務:
sudo systemctl restart docker
管理機上將 my-java 并推送鏡像到 Docker Registry
docker tag my-java [ip]:5000/my-backend:1.0
管理機將鏡像上傳到 Docker Registry
docker push [ip]:5000/my-backend:1.0
1.2 下載鏡像
在其他工作機上下載鏡像
docker pull [鏡像私庫ip]:5000/my-backend:1.0
1.3 創建覆蓋 network
這個要在主節點上創建
docker network create --driver overlay --attachable app_network
1.4 部署服務
主節點上部署
docker service create \--name backend-api \--network app_network \--replicas 3 \192.168.107.157:5000/my-backend:1.0
創建 Nginx 配置文件
mkdir /testcd /testvim default.confupstream backend_api {server backend-api:8081;
}server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ =404;}location ~ ^/api/(.*)$ {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://backend_api;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_redirect off;}
}
注意:
backend-api
是你上面創建的服務名稱請求
/api/xxx
會被轉發到任意一個backend-api
的副本上
1.5 啟動 Nginx 服務
manager添加標簽并進行節點更新
docker node update --label-add role=lb manager注釋:
標簽role
值為lb
根據標簽指定部署
docker service create \--name my-nginx \--network app_network \--publish 80:80 \--mount type=bind,source=/test/default.conf,target=/etc/nginx/conf.d/default.conf \--replicas 1 \--constraint 'node.labels.role == lb' \nginx:latest注釋:
constraint 指定部署到標簽值為lb的機器
replicas 運行一臺機器
mount 運行指定文件
測試訪問
curl http://localhost/api/getMsg
來訪問你的后端服務。請求會由 Nginx 轉發到任意一個 backend-api
副本上,實現負載均衡。
1.6 更新服務
如果你更新了鏡像,可以這樣滾動更新:
docker service update \--image 【鏡像名】:【鏡像版本】 \--update-parallelism 2 \--update-delay 10s \服務名注釋:--update-parallelism 2 一次更新兩個服務
--update-delay 10s 更新一次休息10秒
如果后臺壓力過大可以多增加幾個后臺服務
-- 將服務增加10個
docker service update \--replicas 10 \服務名