2019-08-04に投稿

Docker swarmを使ってみる

docker swarmをセットアップする

docker-machineがインストールされているか確認

$ docker-machine version
docker-machine version 0.16.1, build cce350d7

docker desktop(mac/windows)はdocker-machineが同時にインストールされています。

manager node単独のセットアップ

kubernetes同様、manager node-worker nodeという構成が可能ですが、
今回はmanagerノードだけ(シングルノード)の最小構成とします。

$ docker swarm init --listen-addr 127.0.0.1
(以下、node参加用のトークンが表示される)

docker-composeファイルのバージョンを3に上げる

version: '3'
services:
  # DB
  jcbl_db:
    #container_name: jcbl_db
    image: mysql:5.7.24
    ports:
    - 3310:3306
    environment:
    - MYSQL_ROOT_PASSWORD=********
    - TZ=Asia/Tokyo
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    volumes: 
    - ./sql:/docker-entrypoint-initdb.d
    - ./mysql/data:/var/lib/mysql


  jcbl_node:
    image: node:10.15
    command: [sh, -c, npm install && npm start]
    deploy:
        replicas: 2 
        update_config:
          parallelism: 2
          delay: 10s
    volumes:
      - ../:/src
    working_dir: /src
    tty: true
    ports:
      - "3000:3000"

linksは使用できません。
- Compose file version3のリファレンス#deploy

サービスのdeploy/rolling update

$ docker stack deploy --compose-file docker-compose.yml [STACK名]
  • --compose-fileオプションでcomposeファイルを指定。
  • STACK名はデプロイするまとまりの名称。削除する際や一覧を呼び出す際に使う。
  • コンテナに変更があればrolling updateされる。

rolling updateを実験

試しに上記ymlのnodeバージョンを10.15から10.16に変えてdocker stack deployコマンドを実行する。
1. node10.16コンテナが新規作成され起動と同時に10.15コンテナが1つ終了する
2. 10s(delayで指定した時間)後に1と同様に2つめのコンテナも更新される。

rollbackの実験

docker service rollback [サービス名]を実行。
rolling update同様、新しいコンテナ作成→起動→旧コンテナ終了。
やはり残骸が残るので定期的にpruneする必要がありそう。

$ docker service rollback stackdemo_jcbl_node
stackdemo_jcbl_node
rollback: manually requested rollback 
overall progress: rolling back update: 2 out of 2 tasks 
1/2: running   
2/2: running   
verify: Service converged 

デプロイの終了/コンテナ削除

$ docker stack rm [STACK名]

portainerの導入

GUIでdockerを管理できるツール。CLIに慣れたら使ってみてもよいかも。

- portainer.io
- 自宅での技術検証がより楽しくなる? portainer で Docker コンテナ管理
- Docker を管理する Webアプリ Portainer を Docker Compose で起動する

参考


ckoshien

個人開発4年目。普段はアプリケーションエンジニア。 ReactJS/NodeJS/ReactNative/Java

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント