ども、かっぱです。
tl;dr
考察シリーズ。以下のような環境を Docker Compose 一発で起動出来ると嬉しいなあと思ったので雑に考察したのでメモ。
考察
教材
github.com
スケールイン、スケールアウトを試してみる
docker-compose.yml と Dockerfile を取得する
以下のように GitHub のリポジトリからプロジェクト一式を適当なディレクトリに clone します。
cd ~/dockerfiles/ git clone https://github.com/inokappa/sample-docker-compose-scale.git
以下のように出力されることを確認します。
Cloning into 'sample-docker-compose-scale'... remote: Counting objects: 28, done. remote: Compressing objects: 100% (21/21), done. remote: Total 28 (delta 8), reused 25 (delta 5), pack-reused 0 Unpacking objects: 100% (28/28), done. Checking connectivity... done.
環境を起動する
以下のようにコマンドを実行してスケールイン、スケールアウト環境を起動します。
cd ~/dockerfiles/sample-docker-compose-scale ./_demo.sh
以下のように出力されることを確認します。(コンテナのビルドが走りますので暫くお待ち下さい…)
Successfully built 974b57377b7c Creating sampledockercomposescale_app_1 Creating sampledockercomposescale_consul_server_1 Creating sampledockercomposescale_registrator_1 Creating sampledockercomposescale_haproxy_1
以下のようにコマンドを実行して起動しているコンテナの状態を確認します。
docker-compose -f docker-compose.yml.v1 ps
以下のように出力されることを確認します。
Name Command State Ports ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sampledockercomposescale_app_1 sh run-app.sh Up 0.0.0.0:32774->4567/tcp sampledockercomposescale_consul_server_1 /bin/consul agent -server ... Up 8300/tcp, 8301/tcp, 8301/udp, 8302/tcp, 8302/udp, 8400/tcp, 8500/tcp, 8600/tcp, 8600/udp sampledockercomposescale_haproxy_1 /bin/bash /root/run-haproxy.sh Up 0.0.0.0:80->80/tcp sampledockercomposescale_registrator_1 /bin/registrator --interna ... Up
4 つのコンテナが起動していることを確認します。
更に以下のようにブラウザでアクセス出来ることを確認します。
アプリケーションコンテナのホスト名が表示されている(だけ)ですが…
スケールイン、スケールアウトを試してみる
以下のようにコマンドを実行してスケールイン、スケールアウトを行います。
- スケールアウト
docker-compose -f docker-compose.yml.v1 scale app=2
以下のように出力されることを確認します。
Creating and starting 2 ... done
以下のようにスケールアウト(アプリケーションコンテナが追加)されたことを確認することが出来ます。
docker-compose -f docker-compose.yml.v1 ps app
以下のように出力されることを確認します。
Name Command State Ports -------------------------------------------------------------------------------- sampledockercomposescale_app_1 sh run-app.sh Up 0.0.0.0:32774->4567/tcp sampledockercomposescale_app_2 sh run-app.sh Up 0.0.0.0:32775->4567/tcp
以下のように curl
を利用してブラウザと同様に確認することが出来ます。
curl localhost/hostname
以下のように出力されることを確認します。
# 一回目の実行結果 $ curl localhost/hostname a0aaa121c96e # 二回目の実行結果 $ curl localhost/hostname 068962497d6d
- スケールイン
docker-compose -f docker-compose.yml.v1 scale app=1
以下のように出力されることを確認します。
Stopping and removing sampledockercomposescale_app_2 ... done
以下のようにスケールイン(アプリケーションコンテナが削除)されたことを確認することが出来ます。
docker-compose -f docker-compose.yml.v1 ps app
以下のように出力されることを確認します。
Name Command State Ports -------------------------------------------------------------------------------- sampledockercomposescale_app_1 sh run-app.sh Up 0.0.0.0:32774->4567/tcp
以下のように curl
を利用してブラウザと同様に確認することが出来ます。
curl localhost/hostname
以下のように出力されることを確認します。
# 一回目の実行結果 $ curl localhost/hostname a0aaa121c96e # 二回目の実行結果 $ curl localhost/hostname a0aaa121c96e
アプリケーションコンテナが削除されたので何度アクセスしても同じホスト名しか出力されないことを確認します。
以上
メモでした。
今回、Docker Compose の v2 フォーマットで作成した環境だと Registrator で Service Address が取得出来ない現象を確認したので引き続き調査したいと思います。(やっぱり、v2 フォーマットで弄りたいので)
元記事はこちら
「Docker Compose + Registrator + Consul + Consul-template でカヂュアルにスケールする環境の考察(Docker Compose V1 に限ります)」