Docker入門系列(三):讓你的應用變爲可擴展的服務

Docker入門系列(三)linux

準備工做

介紹

在這一節中,咱們將應用擴容,並支持負載均衡,這一節着重介紹servicegit

  • Stack
  • Services (<-you are)
  • Container (part 2)

Services

在分佈式環境中,services有不少不一樣的應用實例構成。想象一下,你擁有一個大型的視頻分享網站,這個網站好比包含一個服務用來處理數據存儲,另外一個服務在後臺作視頻編解碼,還有一個服務做爲API接入層等等。github

一個服務只運行一種鏡像,可是它定義了鏡像運行的方式,好比,使用什麼端口,運行多少容器的副本,在Docker平臺上,使用docker-compose.yml 能夠很是方便的對服務進行定義、運行、擴容。web

第一個docker-compose.yml

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 定義了以下行爲:網絡

  • 從registry上Pull在第二節上傳的鏡像
  • 運行5個實例做爲一個取名爲web的service,限制每個實例最多使用10%的cpu,50MB內存
  • 容器失敗後當即重啓
  • 將web的80端口映射到宿主機的80端口上
  • 經過webnet在容器間共享80端口,達到負載均衡的目的(在內部, 容器將映射80端口到一個臨時端口上)
  • webnet 的網絡進行默認設置

啓動負載均衡的應用

啓動swarm managerapp

docker swarm init負載均衡

啓動service,並命名爲getstartedlabcurl

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和swarm

中止service的命令

docker stack rm getstartedlab

中止swarm manager

docker swarm leave --force

到目前爲止,你已經學會了如何使用swarm進行服務的上線,擴容,下線操做。在一下節中,會介紹在集羣上執行上線,擴容,下線操做。

相關文章
相關標籤/搜索