DevOpsこんにちは。アプリケーションのデプロイを楽にするためにDockerを使いたいけど、別にクラスタは必要ない規模だったりクラスタの管理もしたくないという人は多いのではないかと思います。そこで、今回は、DockerとCapistrano3を組み合わせて単にデプロイを楽にする方法を紹介します。構成図まず今回の構成図はこんな感じです。AWS上での構成例になっていますが別にどの環境でもあまり関係ない普通のWebアプリケーションを想定してください。実現したい要件次に実現する要件です。変わったことはありません。いつも同じ方式でデプロイするダウンタイムなしでデプロイするデプロイに失敗したら簡単にロールバックできるようにするサーバが増えてもデプロイの方式は変えなくて済むようにするサーバを再起動してもサービスは自動で復旧する方式では方式を見ていきましょう。WebアプリケーションのDockerイメージ化今回は、Dockerを使うので、WebアプリケーションをDockerイメージ化します。今回の構成では、複数コンテナ間の連携はないので簡単です。デプロイにおけるベストプラクティスとして、開発環境やステージング環境でテストした成果物(Artifacts)を本番に反映するときに何らかの変更をするべきではない、というものがあります。したがってデータベースへの接続情報などをはじめとする環境固有の情報は全てコンテナ起動時に引数(環境変数)を使って渡せるようにしてください(言わずもがなですが)。イメージを作成する際は、必ずイメージに何らかのバージョン情報をタグとして付与するようにします。latestタグしかないとデプロイするイメージを指定したりロールバックするのが困難になります。僕の場合は、Railsアプリケーションにバージョン情報を持たせ、イメージをビルドする際にそのバージョンを反映するようにしました。Onceを実現しつつ、タグを複数つけようとしているので若干複雑にはなっています)。runコマンドを実行すればOKです。Capistrano3のタスクは以下のような感じになります。処理の流れとしては以下になります(ただしこのやり方には問題があるので後述)。endendなお、この方式には問題があって、サーバが再起動してしまった時の考慮や新しくサーバを増やしたときの考慮ができていません。次はそれを検討しましょう。再起動などにも対応するために起動処理をホスト側に移す上の例には問題があるのは説明したとおりで、再起動した場合や新たにサーバを追加した場合を考慮しましょう。すると、以下のような方式に変わります。そのコンテナを動かすサーバにはあらかじめ環境変数を設定しておく。Ubuntuであれば/etc/environmentあたりに設定する。etcdとかを使っても良い(が小規模環境だと面倒)。EC2の起動時にUser-data経由で環境変数を設定してもOKコンテナを動かすためのスクリプトをサーバ側にインストールしておく。これをサーバの起動時に動かしたり、デプロイ時にCapistrano3経由でキックする。これを踏まえて以下のような実装になります。コンテナを動かすためのスクリプト今回はbashで作っているが別にPerlでもPythonでもなんでもホスト側に入っている言語ならOKコンテナを動かすホスト側に配置する。場所はどこでも良い(たとえば、/usr/local/bin/run_app.sh)このスクリプト自体の配置をCapistrano3のセットアップタスクで配置してもOK。0起動スクリプトの設定上記のスクリプトがサーバの起動時にも実行されるようにしておきます。以下の例は、UbuntuのUpstartを使った例です。/etc/initの直下に適当な名前(拡張子が.confである必要はあります)で以下のようなファイルを配置します。respawnが設定されていると、何度でも実行してしまうので、respawnは指定しないでください。scriptCapistranoからデプロイの実行ここまでやれば、Capistrano3からのデプロイが簡単になります。タスクは以下のようになるでしょう。endendバージョン(というかタグ)を指定してデプロイしたければ、以下のような形で指定すればOKです。container:deployなお、より詳しいソースは、こちらのレポジトリを見ていただくと良いと思います。2,797AWSを企業に導入する際に知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用までをまとめた書籍。)定価:$14.99この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。2,138チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍です。カンバンの原則や流れの管理などの入門的な事柄から、サービスクラス、メトリクスの使用、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。カンバンを一から学びたい、組織で使ってみたいと考える方に最適な実践的な入門書です。2,138DevOpsの基本と主にツール面からの解説。2,520スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。1,680スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。吉羽龍太郎(翻訳)出版社:達人出版会定価:500円どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。1,598特集の「強いチームの作り方」を寄稿。ニーズが変化する近年のソフトウェア開発では、既成観念にとらわれない新しいアイデアが不可欠ですが一方で意見の対立がメンバーの衝突を引き起こすことも多くあります。「Vagrantプラグイン」と「Packer」について寄稿。開発者向けカンファレンス「DevelopersSummit」のベストスピーカーを中心とした、100名の執筆陣が書籍を選定・紹介。