はじめに
前回、「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を新しく起動したコンテナに割り振る必要があり、いまいちな感じですね。次回はこの辺の手順を自動化する方法について検証したいと思います。