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