Dockerを開発環境で使う場合は、「継続的インテグレーション(CI)に組み込む」「開発に必要なソフトウエアの配布」といった活用方法がある。使い捨てが簡単にできる、必要なミドルウエアやライブラリも含めてパッケージ化できるという、コンテナーの特性が生きる利用方法といえる。
IIJ
毎回クリーンな環境でビルド
DockerをCIに組み込んで使う例として、ここではIIJの活用方法を見ていこう。IIJでは、2014年2月頃からCIツール「drone.io」(以下、drone)とDockerを組み合わせ、開発したプログラムのビルドおよびテストを行っている(図1)。ビルドとテストの実行時には毎回新規にコンテナーを立ち上げ、終了したらコンテナーを消去する。このようにコンテナーを使い捨てにすることで、毎回クリーンな環境でビルドおよびテストができる。
処理の流れは次のようになる。開発者はまず、ソースコードをバージョン管理ツールである「GitHub Enterprise」に登録する。GitHub Enterpriseは登録があったことをdroneに通知し、ソースコードのクローンを作成する。するとdroneは、Dockerのコンテナーを立ち上げ、コンテナー内でビルドおよびテストを実行する。終了後は、GitHub Enterpriseと社内のチャットサーバーにテスト結果を通知する。
さらに、デプロイを自動化する仕組みも整えてある。droneはテスト後にrpmパッケージ(自動インストール用のアーカイブファイル)を生成し、社内リポジトリーに送信する。これをリソース管理やサーバー構築を自動化するツール「serf」に通知。同社ではまだ本格的に活用していないが、serfによって、複数のサーバーにrpmパッケージをインストールできるようになる。Dockerコンテナーはserfへの通知を終えたら毎回消去する。