docker-composeでnginx, fluentd, nodeサーバの構成作ってみたのですが、これを手軽に本番環境にデプロイする手段として、VPS(VULTR) を docker-machine として使うやり方を試してみました。
要確認:私の環境
OS X El Capitan
バージョン 10.11.1
MacBook Pro (Retina, 13-inch, Late 2013)
Docker version 1.10.2, build c3959b1
docker-compose version 1.6.0, build d99cad6
docker-machine version 0.6.0, build e27fb87
あんまり古い docker だと動かないのでお気をつけて。
基本方針
ドライバを切り替えて、デプロイ先となる docker-machine をリモートで作成し、 docker-compose up -d
でデプロイできるようにする。
VULTR の場合
VULTR は海外の VPS サービスです。 DigitalOcean などの競合ですね。
docker-machine をインストールすると DigitalOcean のドライバがデフォルトでついてくるのですが、DigitalOcean には東京リージョンがないんですよね……。
VULTR には東京リージョンがあり、2016/03/24 時点では $5/mo SSD プランが DigitalOcean よりメモリ多めだったので、今回はこちらを使うことにしました。
VULTR に登録して API キーの取得
なかなか管理画面がイケてるので、迷うこともないような気もしますが、Account -> API から取得できます。
スクショには写ってないですが、スクロールすると IP の制御についても記載があり、デフォルトで API を有効にした IP からでないと拒否するようになっています。スタバったりする人は注意を。
VULTR のプラグインをインストール
GitHub のリリースページ から拾ってきて、 docker-machine と同じディレクトリに入れるか、パスを通します。mac なら多分 /usr/local/bin にあるかと。
docker-machine create
下記のコマンドで docker-machine を作成します。
このうち、 vultr-region-id と vultr-plan-id はお好きなものを選んでください。
25 は東京、29 は $5/mo SSD プランです。それぞれの ID は http://vultr-status.appspot.com/ より調べることができます。
$ docker-machine create \
--driver vultr \
--vultr-api-key={あなたのAPIキー} \
--vultr-region-id 25 --vultr-plan-id 29 \
MyVultrMachine
docker-compose を使ってデプロイ
ここまでいけたら、あとは下記のコマンドで終了です。
$ eval $(docker-machine env MyVultrMachine)
$ docker-compose build
$ docker-compose up -d
先ほど作成した MyVultrMachine の情報を DOCKER_HOST などにセットし、 docker-compose build でビルドして、 up -d でデプロイ。
先の私の記事の docker-compose.yml は nginx, node, fluentd の3つのコンテナを立ち上げるもので、8080 ポートにアクセスすると helloworld を返すようになっているので、下記を叩くと helloworld が表示されます。
$ curl $(docker-machine ip MyVultrMachine):8080
本番とローカルで docker-compose.yml を変えたいんだけど
ポート番号を変えたいといったちょっとした変更なら、docker-compose.yml では ${VARIABLE}
で環境変数をよめるので、対応できそうです。
また、docker-compose には --file
オプションがあり、好きな docker-compose を指定できるので、ローカルでしか立ち上げないコンテナなどがある場合はこれで切り替える形になるでしょうか。
このあたりは今後調整していくところです。
まとめと補足
最初の目論見どおり、簡単に VPS にデプロイすることができました。
今回は複数コンテナをデプロイするために compose を使いましたが、1 つのコンテナなら別に使う必要はなくて、"VULTR の場合"までを参考にしてもらって docker コマンド叩けばよいかと。
なお、docker-compose を production で利用することについては、まだ時期尚早。下記ページの最初の数行を訳すと、「まだ開発とかテストに使うのが主目的だよ。あと小さいデプロイならいいけど、大規模なのには多分向かないと思うよ」的なことが書かれています。
https://docs.docker.com/compose/production/
でも Amazon ECS の CLI が docker-compose.yml でのデプロイをサポートしてるので、会社の production で使うならそっちでやる手もありそうです(未検証です)。
何にしても、昔の「色々ハマって docker 使わないほうがむしろ楽」という状況が、「ちょっとハマるところはあるけど使うと色々楽になる」という状況まで変わってきてると感じました。てか楽しい。