先日の勉強会にて
こんにちは。Emotion Techの子安です。最近急に暖かく、というか暑いくらいになりましたね。暑いといえばアイスです。アイスは森永乳業のピノ(バニラ)が好きです。はい。
ところで、先月・今月とDocker関連の勉強会でお話しする機会をいただきました。ありがとうございます。
どちらもDockerを本番環境に適用するにあたって、その開発から運用までの事例を知るというテーマでしたので、弊社Emotion TechでのDocker活用についてご紹介しました。スライドはこちらです。
(画像をクリックするとSlideShareへジャンプします。以下の画像も同様です)
以下、お話した内容を簡単にまとめます。
EmotionTechでのDocker
前半では、システム構成と開発フローについて説明しました。
EmotionTechでは、AWS Elastic Beanstalk上にphusion/baseimage-dockerをベースとしたDockerコンテナを構築して運用しています。システム構成はマイクロサービスというわけではないのですが、役割ごとにWebサーバやAPIサーバなどを5つのコンテナに分けて配置しました。そしてコンテナの軽さを活かし、ローカル環境でも本番環境とほぼ同じコンテナの構成を再現しています。
また開発フローはGitHubフローをベースにしています。masterブランチからコンテナイメージをビルドして、ステージング環境へデプロイするまでがTravis CIの役割。その後、本番環境へデプロイするのはJenkinsサーバから行います。
導入から運用まで
後半では、このシステムの構築や運用で起きたいろいろな問題や発見、検討方針などについてお話ししました。
大きなストーリーとしてはスタートアップ企業という事情もあって人が少ない中、属人化や環境依存を最小にしつつ、いかに効率よく構築・運用するかを考えたという流れです。Elastic Beanstalkやphusion/baseimage-dockerの採用は、AWS・Docker・Rubyについて先人の知恵を借りるためという理由が大きいですし、CIの大部分をTravis CIで実施しているのは、属人化しがちなJenkinsの役割をできるだけ小さくしておきたいという事情によります。
この6月で本稼働してから7ヶ月が経つことになりますが、今までのところ大きな問題は起きていません。
最後に
スライド中でも言及していますが、Dockerの最大の利点は「実行環境+アプリケーションをパッケージしてデプロイできること」だと、私は思っています。Dockerを本番環境まで導入するなら、確認環境(ステージング環境)から本番環境まで、必ず同じコンテナイメージを使うようにしましょう。
ご意見、ご感想、ご質問などありましたら、是非々々フィードバックをお願いいたします。