docker stack /swarm 替代 docker-compose 進行部署


之前一直用docker-compose開發了幾個單例的service, 今天開始壓力測試, 結果發現postgres的CPU負載很重, 就想設置cpus 結果發現docker-compose V3之后 只能寫在deploy字段里, 但是docker-compose up  卻不支持 deploy 

https://docs.docker.com/compose/compose-file/#deploy

說只能用swarm 模式.  這等於說V3的 docker compose  不能直接設定這個?

現在把swarm啟動搞定了. 大概明白docker的意思了:

編輯同一份docker-compose.yml, 但是compose 和 swarm/stack的分工是這樣的:

 docker-compose   用於dev   支持build restart  但是不支持deploy,  

swarm/stack      用於 prod  支持 deply的各種設置,包括分配cpu和內存, 但是創建容器只支持從image,不支持build.

 

假設已經用docker-compose基本開發完畢. 那么准備工作是這樣:

 

一 docker-compose.yml

swarm模式, 每個serive都必須有image,不能只有build.

最簡單的方法,就是先docker-compose up --build 啟動運行無誤

然后docker image ls 查看創建出的鏡像名字

抄到每個Service下面,

然后,別忘了增加deploy字段, 尤其是mode, 對單例, 設置為global

yml形如:

version: '3.7

services: gateway:
#nodejs + socket.io server image: lh2-runtime_gateway build: ./machines/lh2-gateway
...下略
    deploy:
      mode: global
 

 

一 配置swarm

在docker-compose.yml的路徑下(就是原來運行docker-compose的路徑)

docker swarm init

具體細節略過了, 簡單說,我們的manager和worker都是這同一台機器的話, 這一句就夠了, 不用join別的了

二.  stack

docker stack deploy -c docker-compose.yml stack-demo

使用 docker-compose.yml 創建 stack (也就是一堆service), 

這樣服務其實已經創建好了.

但發現其實服務並沒有在線. 檢查一下

replicas 是服務copy的數量, 每個最大1一個,但是當前活動都是0,  全都沒啟動起來

繼續查具體1個service, 用 id

發現不斷報錯, ."Pool overlaps with other one …"

這是和networks有關,根據

https://blog.csdn.net/u010483897/article/details/88017387

要刪除 docker-compose.yml 創建的networks 否則一會服務因為端口相同都rejected  

查看一下docker 的網絡

docker network ls


最后一個的scope 是swarm , driver 時 overlay的 是剛剛創建的,需要保留的

那么前面 bridge  local  那個,是需要刪除的

刪除之后,再查看剛才那個服務, 已經提示啟動成功, 沒有錯誤了

顯示 數量都是 1/1  因為全是global

此時已經可以使用服務了.

docker stats 可以查看到服務全在運行,和用docker-compse up 時 一樣

 

 

總結

基本無坑,比想象的容易. 吃完晚飯2個小時基本從完全不懂到部署成功了.  也不用太去管什么叫swarm ,什么 叫 stack ,先運行起來再說.

感覺還是部署和開發環境  完全分開在不同機器上比較好.  不然, 用 docker-compose build 的時候,還是要重新刪除,創建一遍networks. 但是窮人沒辦法呀.  也將就了.

 

切換會docker-compose 的時候 找不到networks  https://stackoverflow.com/questions/53347951/docker-network-not-found

docker-compose up --force-recreate

 

然而, 用swarm 部署后的效果,感覺和docker-comppse 並沒有什么區別... 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM