Docker入門系列(三)linux
在這一節中,咱們將應用擴容,並支持負載均衡,這一節着重介紹service。git
在分佈式環境中,services有不少不一樣的應用實例構成。想象一下,你擁有一個大型的視頻分享網站,這個網站好比包含一個服務用來處理數據存儲,另外一個服務在後臺作視頻編解碼,還有一個服務做爲API接入層等等。github
一個服務只運行一種鏡像,可是它定義了鏡像運行的方式,好比,使用什麼端口,運行多少容器的副本,在Docker平臺上,使用docker-compose.yml
能夠很是方便的對服務進行定義、運行、擴容。web
docker-compose.yml
是yaml格式的,它定義了Docker容器在生產環境的運行方式。docker
docker-compose.ymlwindows
version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet networks: webnet:
這個docker-compose.yml
定義了以下行爲:網絡
webnet
在容器間共享80端口,達到負載均衡的目的(在內部, 容器將映射80端口到一個臨時端口上)webnet
的網絡進行默認設置啓動swarm managerapp
docker swarm init負載均衡
啓動service,並命名爲getstartedlab
curl
docker stack deploy -c docker-compose.yml getstartedlab
運行以上的命令後,在一個宿主機上啓動5個容器實例。
查看service的Id
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pxfbw2lyo4bo getstartedlab_web replicated 5/5 ruccsbingo/get-started:part2 *:80->80/tcp
Docker swarms啓動5個tasks來運行containers,可使用ps命令查看這些tasks。
docker service ps
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ly162fal310t getstartedlab_web.1 ruccsbingo/get-started:part2 moby Running Running 27 seconds ago
ghrcp7fzjaub _ getstartedlab_web.1 ruccsbingo/get-started:part2 moby Shutdown Shutdown 30 seconds ago
t1jh0d1jsbj8 getstartedlab_web.2 ruccsbingo/get-started:part2 moby Running Running about a minute ago
qdl4t4izqsza getstartedlab_web.3 ruccsbingo/get-started:part2 moby Ready Ready 10 seconds ago
nttsh0krytde _ getstartedlab_web.3 ruccsbingo/get-started:part2 moby Shutdown Running 10 seconds ago
wc9xqpqehwvx getstartedlab_web.4 ruccsbingo/get-started:part2 moby Running Running 10 seconds ago
m8xjlizio550 _ getstartedlab_web.4 ruccsbingo/get-started:part2 moby Shutdown Shutdown 13 seconds ago
t37arxf436d5 getstartedlab_web.5 ruccsbingo/get-started:part2 moby Running Running about a minute ago
使用以下命令列出containers
docker container ls -q
使用curl驗證
Hello World!
Hostname: a8ee4747d8d7
Visits: cannot connect to Redis, counter disabled%
更改docker-compose.yml
文件中replicas
的數量,重啓整個服務。
docker stack deploy -c docker-compose.yml getstartedlab
Docker將會作in-place替換,不用先停服務,或者kill容器。
中止service的命令
docker stack rm getstartedlab
中止swarm manager
docker swarm leave --force
到目前爲止,你已經學會了如何使用swarm進行服務的上線,擴容,下線操做。在一下節中,會介紹在集羣上執行上線,擴容,下線操做。