Dockerでコンテナ2個立ち上げるならComposeしちゃえばいいじゃない

みなさん、Docker使ってますか?

私は使ってません。

しかし日常的には使っていないものの、ちょっと新しいプロダクト試そうかなと公式サイトのQuickstartとかを眺めると、Dockerのコンテナが用意されているケースが増えてきた気がします。世間の流れですね。いわゆるBigWaveです。乗らないとイカンやつです。

そんな中、現在のプロジェクトでKONGというミドルウェアを使うことになりました。

KONGがどういうものかは この辺(Ryuzeeさん)この辺(クラメソ) を読むとなんとなくわかるかもしれません。

同じカテゴリのプロダクトとしては WEB API Degignを配布している、Apigee が有名です。

〜閑話休題〜

このKONGなる謎のミドルウェア。使ったことがないので、どんなものかもわかりません。
最終的にはAWSに環境を構築するので、それを待つのもいいのですが、さしあたってどういうものかを試してみたいのが人情ってやつです。

そんな時、今まではVagrantなどで環境を構築して試用するのが常でしたが、最近ではDockerが流行りのようです。時の流れってやつですね。

実際、公式のインストレーションのページでもDockerが筆頭になっていますし、ここはDockerで行くべきなんだと思います。

ということで、公式の手順を読んでみると、どうやらKONGは DB( cassandra または postgresql )と KONG本体の2つのコンテナが必要のようです。

ここは手順通りにおとなしくDockerコマンドを2回粛々と実行するのが大人のたしなみという説もあるかもしれませんが、違いのわかる大人になるため、エレガントにdocer-composeコマンド1回で2つのコンテナを自在に操って見たいと思います。

手順

ということで、任意のフォルダに “docker-compose.yml” をこの内容で作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
kong-database:
image: postgres:9.4
ports:
- 5432:5432
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
kong:
image: mashape/kong
links:
- kong-database:kong-database
ports:
- 8000:8000
- 8443:8443
- 8001:8001
- 7946:7946
- 7946:7946/udp
environment:
DATABASE: postgres

必要ならdocker-machineを準備し

1
2
$ docker-machine create -d virtualbox kong
$ eval "$(docker-machine env kong)"

おもむろに docker-compose up を実行するだけで、さくっとKONGが起動っ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ docker-compose up
Starting vagrant_kong-database_1...
Starting vagrant_kong_1...
Attaching to vagrant_kong-database_1, vagrant_kong_1
kong-database_1 | The files belonging to this database system will be owned by user "postgres".
kong-database_1 | This user must also own the server process.
−中略−
kong_1 | [INFO] kong 0.8.3
kong_1 | [INFO] Using configuration: /etc/kong/kong.yml
kong_1 | [INFO] Setting working directory to /usr/local/kong
kong_1 | [INFO] database...........postgres host=kong-database database=kong user=kong port=5432
kong_1 | [INFO] dnsmasq............address=127.0.0.1:8053 dnsmasq=true port=8053
kong_1 | [INFO] Leaving cluster..
kong_1 | [ERR] serf is already running
kong_1 | [ERR] Could not start Kong

エラーになりました!!!!

が、めげずにKONGへアクセスしてみると、

1
2
$ curl http://192.168.99.100:8001/status
{"server":{"connections_handled":7,"connections_reading":0,"connections_active":1,"total_requests":7,"connections_accepted":7,"connections_writing":1,"connections_waiting":0},"database":{"oauth2_tokens":0,"jwt_secrets":0,"response_ratelimiting_metrics":0,"keyauth_credentials":0,"oauth2_authorization_codes":0,"acls":0,"apis":0,"hmacauth_credentials":0,"consumers":0,"ratelimiting_metrics":0,"basicauth_credentials":0,"nodes":1,"oauth2_credentials":0,"plugins":0}}

正常にアクセスできる!!!
KONGの起動メッセージがなんとなくすっきりしませんが、何故か起動完了。

まとめ

Docker Composeを使うことにより、コンテナ起動の手間を省いたり「コンテナ起動手順」の代わりに”docker-compose.yml”を配布するなんてこともできたりして、
環境構築のめんどくささが減るんじゃないかなぁ。減るといいなぁ。そんな感じです。

みなさんも良いDokcer Lifeを!