New Relicは,社内で開発インフラストラクチャ運用に使用しているDocker用展開ツールのCenturionを,オープンソースとして公開した。Centurionは,Dockerレジストリから取得したコンテナに,適切な環境変数とホストボリュームマッピング,ポートマッピングなどを設定して,ホストグループ上で実行するツールだ。特別な設定を必要とせず,ローリングデプロイメントをサポートする。
同社のサイトエンジニアリングマネージャであるKarl Matthias氏が,CenturionのMITライセンスによる提供を発表したのはDockerConの期間中だった。このプロジェクトはRuby gemとして提供される。設定ファイルはRakeタスク文法で記述された内蔵DSLを読み込む形式だが,近日中にetcdからの設定読み込みがサポートされる予定だ。DSLにはデプロイするイメージの定義方法,デプロイ対象のDockerサーバ,環境変数,コンテナ毎のボリュームとポートなどが記述されている。ステージングやプロダクションといった複数の環境定義もサポートする。
Centurionには,分散コンテナで動作するタスクもいくつか含まれている。
-
Dockerサーバ群にローリングデプロイを行うrolling_deploy: 各コンテナをひとつずつ停止および起動することで,ロードバランサから見たアプリケーションの可用性継続を保証する。デプロイ実行時には各コンテナに対するヘルスチェックを行い,アプリケーションの正常起動を確認する。既定ではアプリケーションのルートパスにGET要求を発行して,200ステータス範囲内にエンドポイントが有効な応答が発行されることを期待する。
-
Dockerサーバ群へのデプロイを行うdeploy: ハードストップ実行後,指定されたすべてのホストでコンテナを起動する。ひとつのエンドポイントの常時稼働が必要なアプリケーションには推奨されない。
-
ホストにbashコンソールを展開するdeploy_console: コンテナに渡された既存の環境でコマンドラインシェルを起動する。ホストリストにある先頭のホストを使用して,DockerfileのCMDを/bin/bashに置き換える仕組みである。
-
特定のプロジェクト用サーバで実行されているタグをすべて一覧表示するlist:running_container_tags: 現在のすべてのタグと,それが稼働しているマシンの一覧が返される。全ホスト上のタグのユニークリストも取得できるので,デプロイ中に何らかの問題が発生した場合,デプロイ状況を確認するためにも有効だ。
-
指定したプロジェクトを実行中の全コンテナをリストするlist:running_containers: 各Dockerサーバ上にある,プロジェクトのすべてのコンテナの一覧を設定情報から返す。
-
レジストリイメージをリストするlist: レジストリ上にある,指定したプロジェクトのイメージすべての一覧を返す。
同プロジェクトでは設定や検出手段としてのetcd統合,証明書認証,サーバプールへの動的ホストアロケーションなど,さらなる機能の追加を検討中だ。