はじまる

適当な事を適当に書く

docker やり直しメモ(3)

パート3:サービス

Get Started, Part 3: Services | Docker Documentation

の内容をやります。

コンテンツ

  1. Docker Hub に公開したイメージがローカルで稼働するか確認する。
  2. docker-compose.yml を新規作成する。
  3. Swarm を新規作成する
  4. Service を新規作成し、立ち上げる
  5. 複数立ち上げているサービス(Webアプリ)にリクエストを送る。
  6. docker-compose.yml を変更し、サービスを再デプロイする
  7. サービスを停止する。

1. Docker Hub に公開したイメージがローカルで稼働するか確認する。

前回でDocker Hub に公開したアプリ/イメージ me/get-started:part2

~/H/docker ❯❯❯ docker run -p 4000:80 me/get-started:part2
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

2.docker-compose.yml を新規作成する。

docker-compose.yml は docker コンテナがどう振舞うべきかを定義するファイルです。

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:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

3. Swarm を新規作成する

/H/docker2 ❯❯❯ docker swarm init
Swarm initialized: current node (q3esrh9syrf5134dhcf3xl3et) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6bmmslhgt0purgsvaq1uz4t7r0oqbmd05iht2j3n5o1e2wp5he-5i0fetrww3bms4v4r728g21dx 192.168.65.3:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

4. Service を新規作成し、立ち上げる

サービス・スタックを新規作成します。名称はgetstartedlab_webです。

~/H/docker2 ❯❯❯ ls
docker-compose.yml
~/H/docker2 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web

作成されました。

~/H/docker2 ❯❯❯ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
kl4pf7cid63z        getstartedlab_web   replicated          5/5                 me/get-started:part2   *:4000->80/tcp

ps を確認するとレプリカ5個に指定してあるので、プロセスが5個起動している。

~/H/docker2 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
b0ae52cb76e3       me/get-started:part2   "python app.py"     58 seconds ago      Up About a minute   80/tcp              getstartedlab_web.3.xc8wyy14dqqix5iajkwhn33gv
6bdac92694f6        me/get-started:part2   "python app.py"     58 seconds ago      Up About a minute   80/tcp              getstartedlab_web.1.ixvqn01cu5c6anvkvf9bqbrgm
7a54aa9b7958        me/get-started:part2   "python app.py"     58 seconds ago      Up About a minute   80/tcp              getstartedlab_web.2.ha3vhdc0mb66v9zn4k9dryq32
ee9ade245769        me/get-started:part2   "python app.py"     58 seconds ago      Up About a minute   80/tcp              getstartedlab_web.5.jxsguzj7tn5eu1utizh6nnl9g
5fd6ee649054        me/get-started:part2   "python app.py"     58 seconds ago      Up About a minute   80/tcp              getstartedlab_web.4.s7ns8f0n10jlqedajl5jrt8hs

サービススタック名を指定してプロセスを表示することもできる。

~/H/docker2 ❯❯❯ docker service ps getstartedlab_web
ID                  NAME                  IMAGE                             NODE                    DESIRED STATE       CURRENT STATE           ERROR               PORTS
ixvqn01cu5c6        getstartedlab_web.1   me/get-started:part2   linuxkit-025000000001   Running             Running 4 minutes ago
ha3vhdc0mb66        getstartedlab_web.2   me/get-started:part2   linuxkit-025000000001   Running             Running 4 minutes ago
xc8wyy14dqqi        getstartedlab_web.3   me/get-started:part2   linuxkit-025000000001   Running             Running 4 minutes ago
s7ns8f0n10jl        getstartedlab_web.4   me/get-started:part2   linuxkit-025000000001   Running             Running 4 minutes ago
jxsguzj7tn5e        getstartedlab_web.5   me/get-started:part2   linuxkit-025000000001   Running             Running 4 minutes ago

5. 複数立ち上げているサービス(Webアプリ)にリクエストを送る。

それぞれ違うホストからレスポンスが返却されている。これは、5個立ち上げているコンテナのなかで、リクエストをロードバランシングしているため。ラウンドロビンらしい。

gyazo.com

6. docker-compose.yml を変更し、サービスを再デプロイする

レプリカ数を5から3に減らしてみる。

~/H/docker2 ❯❯❯ vim docker-compose.yml
~/H/docker2 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
b0ae52cb76e3        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.3.xc8wyy14dqqix5iajkwhn33gv
6bdac92694f6        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.1.ixvqn01cu5c6anvkvf9bqbrgm
7a54aa9b7958        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.2.ha3vhdc0mb66v9zn4k9dryq32
ee9ade245769        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.5.jxsguzj7tn5eu1utizh6nnl9g
5fd6ee649054        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.4.s7ns8f0n10jlqedajl5jrt8hs
~/H/docker2 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab
Updating service getstartedlab_web (id: kl4pf7cid63za93ycaf2cw9tf)
~/H/docker2 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
b0ae52cb76e3        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.3.xc8wyy14dqqix5iajkwhn33gv
6bdac92694f6        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.1.ixvqn01cu5c6anvkvf9bqbrgm
7a54aa9b7958        me/get-started:part2   "python app.py"     22 minutes ago      Up 22 minutes       80/tcp              getstartedlab_web.2.ha3vhdc0mb66v9zn4k9dryq32
~/H/docker2 ❯❯❯

7. サービスを停止する。

~/H/docker2 ❯❯❯ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
kl4pf7cid63z        getstartedlab_web   replicated          3/3                 me/get-started:part2   *:4000->80/tcp

~/H/docker2 ❯❯❯ docker stack rm getstartedlab
Removing service getstartedlab_web
Removing network getstartedlab_webnet

~/H/docker2 ❯❯❯ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS

~/H/docker2 ❯❯❯ docker swarm leave --force
Node left the swarm.
~/H/docker2 ❯❯❯

以上。