近年、注目を集めているDockerについて解説する。DockerはGo言語で記述された、オープンソースの「コンテナ」実行環境だ。ここでいうコンテナとは、アプリケーションのソースコードと、そのアプリケーションに必要なバイナリーコードやライブラリ、アプリケーションと一緒に動作するミドルウエアなどを、一つの実行形式として“固めた”ものだ。例えば、オープンソースのCMSであるWordPressであれば「WordPressのソースコード+開発言語のPHPの実行環境+データベースのMySQL+WebサーバーのApache」などを一つのコンテナに含むことが多い。

 上記のような構成でWordPressを運用していると、「Apacheだけをアップデートしたい」という状況が起こることがある。Dockerを使わずに、Apacheだけをバージョンアップした場合、しばしば「ローカルの開発環境でApacheのバージョンを上げて動作確認したが、実際に本番環境にデプロイしてみたら動かない」といった問題が発生する。PHPのバージョンが本番環境と開発環境で微妙に違っていた、などの理由からだ。

 Dockerでは、ローカルの開発環境で動作確認したコンテナと、全く同じ構成のコンテナをそのまま本番環境に持っていき、実行環境の同一性を保証できるため、このようなサーバーごとの問題を避けられる。同じ理由から、ミドルウエアのアップデートや、依存関係にあるバイナリーコードやライブラリの管理などが手軽に行えるようになる。万一、本番環境で動かないなどの事態が起きれば、以前のコンテナの状況に戻すことも用意だ。

 また、アプリケーションが動作する環境をコンテナの単位で管理することによる副次的効果もある。「コンテナの内部」と「コンテナの外部」に担当者を明確に分離して作業できるのだ。アプリケーション開発者はアプリケーションのソースコードと、それに依存するフレームワークや言語のバージョンといったコンテナ内部のことに集中できる。一方、システム管理者はコンテナ外部のネットワークやログ収集、監視などに集中できるのだ。担当者が本来集中すべき関心事に専念できるという意味で、重要なメリットであると強調したい。