tag:crieit.net,2005:https://crieit.net/tags/swarm/feed 「swarm」の記事 - Crieit Crieitでタグ「swarm」に投稿された最近の記事 2019-08-04T00:34:25+09:00 https://crieit.net/tags/swarm/feed tag:crieit.net,2005:PublicArticle/15297 2019-08-04T00:34:25+09:00 2019-08-04T00:34:25+09:00 https://crieit.net/posts/Docker-swarm Docker swarmを使ってみる <h1 id="docker swarmをセットアップする"><a href="#docker+swarm%E3%82%92%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B">docker swarmをセットアップする</a></h1> <h2 id="docker-machineがインストールされているか確認"><a href="#docker-machine%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D">docker-machineがインストールされているか確認</a></h2> <pre><code class="linux-config">$ docker-machine version docker-machine version 0.16.1, build cce350d7 </code></pre> <p>docker desktop(mac/windows)はdocker-machineが同時にインストールされています。</p> <h2 id="manager node単独のセットアップ"><a href="#manager+node%E5%8D%98%E7%8B%AC%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">manager node単独のセットアップ</a></h2> <p>kubernetes同様、manager node-worker nodeという構成が可能ですが、<br /> 今回はmanagerノードだけ(シングルノード)の最小構成とします。</p> <pre><code>$ docker swarm init --listen-addr 127.0.0.1 (以下、node参加用のトークンが表示される) </code></pre> <h1 id="docker-composeファイルのバージョンを3に上げる"><a href="#docker-compose%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%923%E3%81%AB%E4%B8%8A%E3%81%92%E3%82%8B">docker-composeファイルのバージョンを3に上げる</a></h1> <pre><code class="yml">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" </code></pre> <p><code>links</code>は使用できません。<br /> - <a target="_blank" rel="nofollow noopener" href="https://qiita.com/goforbroke/items/b4a071af71f457960e59#deploy">Compose file version3のリファレンス#deploy</a></p> <h1 id="サービスのdeploy/rolling update"><a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AEdeploy%2Frolling+update">サービスのdeploy/rolling update</a></h1> <pre><code>$ docker stack deploy --compose-file docker-compose.yml [STACK名] </code></pre> <ul> <li><code>--compose-file</code>オプションでcomposeファイルを指定。</li> <li><code>STACK名</code>はデプロイするまとまりの名称。削除する際や一覧を呼び出す際に使う。</li> <li>コンテナに変更があればrolling updateされる。</li> </ul> <h2 id="rolling updateを実験"><a href="#rolling+update%E3%82%92%E5%AE%9F%E9%A8%93">rolling updateを実験</a></h2> <p>試しに上記ymlのnodeバージョンを<code>10.15</code>から<code>10.16</code>に変えて<code>docker stack deploy</code>コマンドを実行する。<br /> 1. node10.16コンテナが新規作成され起動と同時に10.15コンテナが1つ終了する<br /> 2. 10s(<code>delay</code>で指定した時間)後に1と同様に2つめのコンテナも更新される。</p> <h2 id="rollbackの実験"><a href="#rollback%E3%81%AE%E5%AE%9F%E9%A8%93">rollbackの実験</a></h2> <p><code>docker service rollback [サービス名]</code>を実行。<br /> rolling update同様、新しいコンテナ作成→起動→旧コンテナ終了。<br /> やはり残骸が残るので定期的にpruneする必要がありそう。</p> <pre><code>$ 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 </code></pre> <h1 id="デプロイの終了/コンテナ削除"><a href="#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%AE%E7%B5%82%E4%BA%86%2F%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%89%8A%E9%99%A4">デプロイの終了/コンテナ削除</a></h1> <pre><code>$ docker stack rm [STACK名] </code></pre> <h1 id="portainerの導入"><a href="#portainer%E3%81%AE%E5%B0%8E%E5%85%A5">portainerの導入</a></h1> <p>GUIでdockerを管理できるツール。CLIに慣れたら使ってみてもよいかも。<br /> <a href="https://crieit.now.sh/upload_images/fe0841b8a624bb3ae50337586fb2afcb5d45a85435022.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fe0841b8a624bb3ae50337586fb2afcb5d45a85435022.png?mw=700" alt="" /></a><br /> - <a target="_blank" rel="nofollow noopener" href="https://www.portainer.io/">portainer.io</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://qiita.com/ao_log/items/d8ef847c826746f9e84b">自宅での技術検証がより楽しくなる? portainer で Docker コンテナ管理</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://obel.hatenablog.jp/entry/20180816/1534391250">Docker を管理する Webアプリ Portainer を Docker Compose で起動する</a></p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/tora470/items/5120d51f9dbab62d708e">Docker ComposeをDockerのswarm modeで使えるようになったので試してみた</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://blog.1q77.com/2018/10/rolling-update-on-single-node-docker-swarm/">Single node docker swarm でお手軽 rolling update</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/RyoMa_0923/items/eb827c5633c87c885a31">Dockar swarm mode クラスタの構築</a></li> </ul> ckoshien