version: "3"
services:
web: # service 的名稱
image: username/repo:tag
deploy:
replicas: 5 # 從這個image開5個instance
resources: # 每一個最多只能用10%的CPU / 50MB的ram
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure #只要有一個掛點就重開container
ports:
- "4000:80" # 機器上的4000 port對應到 container內的 80 port
networks:
- webnet #指定 web service上所有的containers經由 負載平衡的 webnet 網路共享他們的 80 port
networks:
webnet: #定義webnet網路為預設設定
swarm初始化:docker swarm init
$ docker swarm init
Swarm initialized: current node (bhl4roewyiczl6jsc0n3ha5jl) is now a manager.....
部屬Service docker stack deploy -c docker-compose.yml <app名稱>
$ docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
檢視Service清單:docker service ls
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
j6qm5xjrtx42 getstartedlab_web replicated 5/5 jessie75919/docker-get-started:part2 *:4000->80/tcp
name = <
app名稱>_<service名稱> =>
getstartedlab_web
檢視 Service內的執行的container :
docker service ps
<app名稱>_<service名稱>
$ docker service ps getstartedlab_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ob9thyo6xpb5 getstartedlab_web.1 jessie75919/docker-get-started:part2 linuxkit-025000000001 Running Running about a minute ago
81c69xhoahgt getstartedlab_web.2 jessie75919/docker-get-started:part2 linuxkit-025000000001 Running Running about a minute ago
qvlc8lvshzjg getstartedlab_web.3 jessie75919/docker-get-started:part2 linuxkit-025000000001 Running Running about a minute ago
28s0g73rb6st getstartedlab_web.4 jessie75919/docker-get-started:part2 linuxkit-025000000001 Running Running about a minute ago
lp68wxvdyq9o getstartedlab_web.5 jessie75919/docker-get-started:part2 linuxkit-025000000001 Running Running about a minute ago
單一個container在一個service被稱為 task
,每一個task都有一個獨立的ID
到 localhost:4000查看是否成功的運行起來。
關閉 app stack: docker stack rm <app名稱>
$ docker stack rm getstartedlab
Removing service getstartedlab_web
Removing network getstartedlab_webnet
關閉 swarm: docker swarm leave --force
$ docker swarm leave --force
Node left the swarm.
# Swarm
Enable Swarm mode => 把目前這台主機設定為 swarm manager
docker swarm init
設定為workers => docker swarm join
新開兩台virtualbox 上的虛擬機
docker-machine create --driver virtualbox myvm1 # swarm manager
docker-machine create --driver virtualbox myvm2 # worker
檢視一下目前虛擬機的狀態:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.101:2376 v18.09.1
myvm2 - virtualbox Running tcp://192.168.99.102:2376 v18.09.1
指定第一台vm為 swarm manager
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>"
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.101:2377"
Swarm initialized: current node (jopdxt6599vcmyouali4y1w6h) is now a manager.
指定第二台vm為 worker
docker-machine ssh myvm2 "docker swarm join --token <token >192.168.99.101:2377"
查看目前所有的vm1管理的所有node:
docker-machine ssh myvm1 "docker node ls"
$ docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
jopdxt6599vcmyouali4y1w6h * myvm1 Ready Active Leader 18.09.1
tzf6jtdpu7z16v9ousjeddx3k myvm2 Ready Active 18.09.1
任一 worker node 離開 swarm docker swarm leave
manage node 退出 swarm mode docker swarm leave -f
學習Reference: