Edited at

Docker Composeを使ってIBM Containerをスケールアウトさせる

More than 3 years have passed since last update.


はじめに

前回、「Docker Composeを使ってIBM Containerを管理する」という記事を書きましたが、docker-composeコマンドのscaleオプションを使って、コンテナの数を動的に変える、というところまでは試すことができませんでした。この記事では、docker-composeを使って、Bluemix上のIBM Containerの数を動的に変えることができるか、検証してみます。


前回のおさらい

前回は、以下のような二つのコンテナをdocker-composeを使ってIBM Containerに展開できることを確認しました。

$ docker-compose ps

Name Command State Ports
----------------------------------------------------------------------
dockercompose_redis_1 Up
dockercompose_web_1 Up 169.44.119.192:5000->5000/tcp


docker-composeを使ってIBM Containerをスケールアウトさせる

では、早速本題に入りましょう。docker-compose scaleコマンドを使い、webコンテナの数を増やしてみました。

$ docker-compose -f docker-compose-bluemix.yml scale web=3

WARNING: The "web" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating and starting 2 ...
Creating and starting 3 ...
Creating and starting 3 ... done
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
dockercompose_redis_1 Up
dockercompose_web_1 Up 169.44.119.192:5000->5000/tcp
dockercompose_web_2 Up 172.31.0.162:5000->5000/tcp
dockercompose_web_3 Up 172.31.0.163:5000->5000/tcp

なにやらWARNINGが出ましたが、webコンテナの数が3つに増えたようです!それぞれのコンテナのIPアドレスを、同じホストのポート番号5000番を割り当てたのがまずかったようですね。ですが、docker-compose psコマンドの出力を見てみると、ホストマシンに勝手新しいIPアドレス(172.31.0.162と172.31.0.163)が割り当てられ、それぞれを新しいコンテナに割り当て、事なきを得ているようです。Bluemixのダッシュボードのほうも確認してみると。。。

3つのコンテナが稼動していることが確認できました!さて、せっかくなので新しくできたコンテナのほうにも外部IPアドレスを割り当ててアクセスしてみましょう。なお、私のBluemixの無料アカウントでは外部IPは2つまでしか取得できないので、2つのコンテナに外部IPアドレスを割り当てます。cf ic ip requestで新しいIPアドレスを取得し、そのアドレスを増えたコンテナに割り当てます。

$ cf ic ip bind 169.44.113.228 dockercompose_web_2

OK
The IP address was bound successfully.
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
dockercompose_redis_1 Up
dockercompose_web_1 Up 169.44.119.192:5000->5000/tcp
dockercompose_web_2 Up 169.44.113.228:5000->5000/tcp
dockercompose_web_3 Up 172.31.0.171:5000->5000/tcp

それぞれのIPアドレスに対して、ブラウザでアクセスしてみると。。。





それぞれのwebアプリケーションが同じredisデータベースコンテナから同じエントリを取得して、それぞれのwebアプリケーションが値をインクリメントしているように見えますね!


まとめ

Docker Composeを使って、IBM Containerをスケールアウトできることがわかりました。しかし、このままでは、手動で外部IPアドレスを取得し、そのIPを新しく起動したコンテナに割り振る必要があり、いまいちな感じですね。次回はこの辺の手順を自動化する方法について検証したいと思います。