Figを使って複数のDockerコンテナをコマンド一発で立ち上げる
土日を使ってDocker入門を読みながらDockerを触ってみました。
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (4件) を見る
とりあえずRails/MySQL/Elasticsearchで構成されたWebサービスの開発環境を作ることを想定して、ひと通り手でコマンドを打ちながらMySQLとElasticsearchのコンテナを作ってRailsから接続させることはできました。
$ docker run -d -p 9200:9200 -p 9300:9300 dockerfile/elasticsearch $ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql
これはこれで良いのですが毎回イメージごとに引数を思い出すのはだるいのでシェルスクリプトでも書こうかなと思ったら、ちょうどFigという複数のコンテナを一元管理する仕組みを提供してくれるツールを見つけたので使ってみました。
前提
- DockerとFigがインストール済
- OS XではHomebrewでboot2dockerとFigをインストールできます
- 使うイメージ
fig.yml
docker run
で起動するときのオプションをfig.ymlに書きます。
リファレンスはここにありますがdocker run
のオプションをそのまま書くだけなので簡単です。
elasitcsearch: image: dockerfile/elasticsearch ports: - '9200:9200' mysql: image: mysql ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: password
実行
あとはfig up
するだけです。
実行するとMySQLとElasticsearchの起動ログがずらずらと流れて起動完了します。 これで最新のMySQLとElasticsearchをホストOSの環境を汚すことなくインストールして使うことができます。
fig scale
さらにfig scale
というコマンドを使うと簡単にサービスを複数立ち上げることもできます。
以下はMySQLのコンテナを3つに増やした場合ですが、fig scale mysql=3
とするだけです。
(ただし、ポートフォワードしてると衝突してしまうため3306:3306
としていたものを3306
に変更しました)
% fig scale mysql=3 Starting figtest_mysql_2... Starting figtest_mysql_3... % fig ps Name Command State Ports ----------------------------------------------------------------------------------------- figtest_elasitcsearch_1 /elasticsearch/bin/elastic ... Up 9300/tcp, 9200->9200/tcp figtest_mysql_3 mysqld --datadir=/var/lib/ ... Up 49155->3306/tcp figtest_mysql_2 mysqld --datadir=/var/lib/ ... Up 49154->3306/tcp figtest_mysql_1 mysqld --datadir=/var/lib/ ... Up 49153->3306/tcp
この環境でMySQLだけ増やしても意味無いですが、ResqueなどのWorkerを複数立ち上げたりロードバランサのコンテナを追加したりすると開発環境でも本番環境に近い構成が簡単に作れるようになるかもしれませんね。
まとめ
Figを使うと
- プロジェクトが依存するミドルウェアをコマンド1つで立ち上げられる
- 1つのマシンに複数バージョンのミドルウェアを共存させられる
- チーム開発時にDockerのことを知らないメンバーでも簡単に同じ環境を作れる
といったことが簡単に実現させられるようになります。
しかもFigの開発元は最近Docker社に買収されFigはDockerの公式ツールになるようなので今後もっと便利になっていきそうです。