LoginSignup
0
0

More than 5 years have passed since last update.

dockerチュートリアル 〜3章終

Posted at

前回の続き。
(このシリーズ記事、特に意味が中途半端なところでブツ切れてるので
チュートリアル全部終わったら記事まとめます。)

まず前回作ったdocker-compose.yml
説明が書いてあったので下記にまとめる

docker-compose.yml
version: "3"
services:
  web:
    image: kugyu10/get-started:part2 #前章で作ったタグ付きイメージ
    deploy:
      replicas: 5                    #5個のコンテナを用意
      resources:
        limits:
          cpus: "0.1"                #それぞれCPU使用率10%制限
          memory: 50M                #メモリ50MB制限
      restart_policy:
        condition: on-failure        #落ちたら再起動
    ports:
      - "4000:80"                    #4000→80にMapping
    networks:
      - webnet                       #ネットワークはwebnetって設定使う
networks:
  webnet:                            #何も書いてない、つまりデフォルトの設定

ファイル名から分かるようにYMLで書いてある。
YMLファイルは常に

key:値

の形で入れ子で書いてあるので、
なんとなく雰囲気でも読めるのがありがたい。

次にserviceを起動する

まず

$ docker swarm init

を行う。(swarmの意味は4章で解説)

その後、

$ docker stack deploy -c docker-compose.yml getstartedlab #←がサービス名になる
Creating network getstartedlab_webnet
Creating service getstartedlab_web

これでdeployできた?
確認コマンドは docker service ls

$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                       PORTS
dx3l42cx9hlr        getstartedlab_web   replicated          5/5                 kugyu10/get-started:part2   *:4000->80/tcp

上の最後の行のNAMEの値getstartedlab_webに注目していただきたい。
docker-compose.yml作ったサービス名と一致してます。

docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                       PORTS
0rsve0q252li        getstartedlab_web   replicated          5/5                 kugyu10/get-started:part2   *:4000->80/tcp
[test_python_dev]docker service ps getstartedlab_web
ID                  NAME                  IMAGE                       NODE                    DESIRED STATE       CURRENT STATE            ERROR               PORTS
eka1fs1oymju        getstartedlab_web.1   kugyu10/get-started:part2   linuxkit-025000000001   Running             Running 43 seconds ago                       
q6p3v0z0v5aw        getstartedlab_web.2   kugyu10/get-started:part2   linuxkit-025000000001   Running             Running 44 seconds ago                       
59ubtqdl1zx7        getstartedlab_web.3   kugyu10/get-started:part2   linuxkit-025000000001   Running             Running 44 seconds ago                       
o4f02pwent24        getstartedlab_web.4   kugyu10/get-started:part2   linuxkit-025000000001   Running             Running 43 seconds ago                       
dflpxlkzc2s7        getstartedlab_web.5   kugyu10/get-started:part2   linuxkit-025000000001   Running             Running 43 seconds ago                          

5つのコンテナかユニークなIDを振られながら元気に(?)動いているようです、多分。

$ docker container ls -q
01538f0159a2
fc574051f775
38a200c6202c
3e88db70c107
b140a2fc314b

で、各コンテナのID? Hostname? はこれでわかります。

localhost:4000
を叩いてみると

$ curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> fc574051f775<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

$ curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> b140a2fc314b<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

$ curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> 38a200c6202c<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

$ curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> 01538f0159a2<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

$ curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> 3e88db70c107<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

叩くたびにHostnameが変わっている。
ロードバランシングの結果、都度処理しているコンテナが変わっているということだ。

スケールアップしたいなら、docker-compose.ymlの中の
コンテナ数をあげてから、再度docker stack deployすればいい。
(起動中のコンテナを1つ1つ落とすとかしないでいいらしい。便利!)

テストとか終わってサービスを終了するなら

$ docker stack rm getstartedlab
Removing service getstartedlab_web
Removing network getstartedlab_webnet

で終了できる。

swarmも終わるなら

docker swarm leave --force

これで3章は終了!

ちょっとでてきたコマンドが多かったので
チートシートをまとめ

# stackを確認
docker stack ls

# composefileからサービスを作って起動
docker stack deploy -c <composefile> <appname>

# ↑で作ったサービス一覧
docker service ls 

# 指定したサービス名が今動いているか確認                
docker service ps <service>

# タスクやコンテナを調べる         
docker inspect <task or container>

# コンテナのHostname?一覧を出す                   
docker container ls -q

# サービス終わり
docker stack rm <appname>                            

# swarm(*)終わり
docker swarm leave --force

swarmなどの意味は4章で学ぶ!

今日はここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0