Docker Swarm 服務版本更新nginx
環境:web
一、管理節點:建立服務設置更新策略redis
docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ --update-parallelism 2 \ --update-failure-action continue \ redis:3.0.6
# 建立命令 docker service create \ # 副本數 --replicas 3 \ # 服務名 --name redis \ # 設定容器間更新時間間隔 --update-delay 10s \ # 更新時同時並行更新數量,默認1 --update-parallelism 2 \ # 任務容器更新失敗時的模式 continue爲繼續使用 --update-failure-action continue \ # 鏡像 redis:3.0.6
命令:docker service ls
ID NAME MODE REPLICAS IMAGE
v76p9bl941bk redis replicated 3/3 redis:3.0.6
命令:docker service ps redis ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 2pruajw13gud redis.1 redis:3.0.6 slave02 Running Running 4 minutes ago ma8ait8xcagl redis.2 redis:3.0.6 slave02 Running Running 4 minutes ago igpwcuyumwzu redis.3 redis:3.0.6 slave01 Running Running 5 minutes ago
二、管理節點:手動更新服務版本docker
docker service update --image redis:3.0.7 redis
命令:docker service ps redis ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS tio9f89x7fzk redis.1 redis:3.0.7 slave02 Running Running 2 minutes ago 2pruajw13gud \_ redis.1 redis:3.0.6 slave02 Shutdown Shutdown 2 minutes ago e3fuv9fm202x redis.2 redis:3.0.7 slave01 Running Running 2 minutes ago ma8ait8xcagl \_ redis.2 redis:3.0.6 slave02 Shutdown Shutdown 2 minutes ago zku5h3h4dqkn redis.3 redis:3.0.7 slave01 Running Running 2 minutes ago igpwcuyumwzu \_ redis.3 redis:3.0.6 slave01 Shutdown Shutdown 3 minutes ago
docker service inspect redis [ { "ID": "v76p9bl941bk87pwwk3nvtwfe", "Version": { "Index": 1479 }, "CreatedAt": "2018-11-07T06:19:23.210686656Z", "UpdatedAt": "2018-11-07T06:30:53.565888582Z", "Spec": { # 服務名稱 "Name": "redis", "TaskTemplate": { "ContainerSpec": { # 服務鏡像 "Image": "redis:3.0.7@sha256:730b765df9fe96af414da64a2b67f3a5f70b8fd13a31e5096fee4807ed802e20", "DNSConfig": {} }, "Resources": { "Limits": {}, "Reservations": {} }, "RestartPolicy": { "Condition": "any", "MaxAttempts": 0 }, "Placement": {}, "ForceUpdate": 0 }, "Mode": { # 模式 "Replicated": { # 副本數 "Replicas": 3 } }, # 服務更新時應用策略 "UpdateConfig": { # 同時更新任務數 "Parallelism": 1, # 更新間隔時間 "Delay": 10000000000, # 更新失敗後動做 pause暫停 "FailureAction": "pause", # 更新失敗後繼續運行半分比 "MaxFailureRatio": 0 }, "EndpointSpec": { # 默認分配1個虛擬IP "Mode": "vip" } }, "PreviousSpec": { "Name": "redis", "TaskTemplate": { "ContainerSpec": { "Image": "redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842", "DNSConfig": {} }, "Resources": { "Limits": {}, "Reservations": {} }, "RestartPolicy": { "Condition": "any", "MaxAttempts": 0 }, "Placement": {}, "ForceUpdate": 0 }, "Mode": { "Replicated": { "Replicas": 3 } }, "UpdateConfig": { "Parallelism": 1, "Delay": 10000000000, "FailureAction": "pause", "MaxFailureRatio": 0 }, "EndpointSpec": { "Mode": "vip" } }, "Endpoint": { "Spec": {} }, "UpdateStatus": { "State": "completed", "StartedAt": "2018-11-07T06:29:00.44192283Z", "CompletedAt": "2018-11-07T06:30:53.56587273Z", "Message": "update completed" } } ]
注:升級過程,按順序中止一個容器任務去對這個中止的任務進行更新,最後更新爲running狀態,再繼續往下更新其餘容器任務,若是更新失敗它會暫停更新,切換到下一個容器任務繼續更新直到全部容器。ide
Docker Swarm 服務版本回滾spa
一、管理節點:建立服務時設定回滾策略3d
docker service create \ --name my_web \ --replicas 10 \ --rollback-parallelism 2 \ --rollback-monitor 20s \ --rollback-max-failure-ratio .2 \ nginx:1.12
# 建立服務 docker service create \ # 服務名 --name my_web \ # 副本數 --replicas 10 \ # 同時執行回滾數動做 --rollback-parallelism 2 \ # 每次容器與容器之間的回滾時間間隔 --rollback-monitor 20s \ # 回滾故障率若是小於百分比容許運行 --rollback-max-failure-ratio .2 \ # 使用鏡像 nginx:1.12
命令:docker service ps -f "DESIRED-STATE=running" my_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bgqpm1s0a24l my_web.1 nginx:1.12 slave01 Running Running about a minute ago jttvdgzpiz02 my_web.2 nginx:1.12 slave01 Running Running about a minute ago t8yqfrzoa7fj my_web.3 nginx:1.12 slave02 Running Running about a minute ago xgh712gi2eld my_web.4 nginx:1.12 slave02 Running Running about a minute ago 2tnw3tnofyn5 my_web.5 nginx:1.12 slave01 Running Running about a minute ago on4khcpkb2h7 my_web.6 nginx:1.12 slave02 Running Running about a minute ago gxdeqfbmq60k my_web.7 nginx:1.12 slave01 Running Running about a minute ago kmyz0btgb0hk my_web.8 nginx:1.12 slave02 Running Running about a minute ago lso2ry7f2v0o my_web.9 nginx:1.12 slave01 Running Running 2 minutes ago ee21b2ud0mkk my_web.10 nginx:1.12 slave02 Running Running about a minute ago
二、管理節點:更新服務提高一個版本code
docker service update --image nginx:1.13 my_web
docker service ps -f "DESIRED-STATE=running" my_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bgqpm1s0a24l my_web.1 nginx:1.13 slave01 Running Running about a minute ago jttvdgzpiz02 my_web.2 nginx:1.13 slave01 Running Running about a minute ago t8yqfrzoa7fj my_web.3 nginx:1.13 slave02 Running Running about a minute ago xgh712gi2eld my_web.4 nginx:1.13 slave02 Running Running about a minute ago 2tnw3tnofyn5 my_web.5 nginx:1.13 slave01 Running Running about a minute ago on4khcpkb2h7 my_web.6 nginx:1.13 slave02 Running Running about a minute ago gxdeqfbmq60k my_web.7 nginx:1.13 slave01 Running Running about a minute ago kmyz0btgb0hk my_web.8 nginx:1.13 slave02 Running Running about a minute ago lso2ry7f2v0o my_web.9 nginx:1.13 slave01 Running Running 2 minutes ago ee21b2ud0mkk my_web.10 nginx:1.13 slave02 Running Running about a minute ago
三、管理節點:手動回滾到上一個版本orm
docker service update --rollback my_web
命令:docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
nikder7y06o2 my_web replicated 10/10 nginx:1.12