前回は、コンテナの特徴を説明した。コンテナはその特徴を生かした使い方をすることで、従来のシステムでは想像もつかないさまざまなメリットを得ることができる。
そこで今回は、コンテナを活用することでどのようなメリットを得ることができるのか、イメージしやすいよう、開発者と運用担当者の目線で紹介しよう。
3種類のシステム環境
コンテナのメリットを紹介する前に、開発者と運用担当者の目線を理解いただくため、システムにおける「環境」について説明しておく。一般的に、システムには「開発環境」「ステージング環境」「本番環境」が存在する。
開発環境
アプリケーションの新機能開発や修正のため、開発者によって使われるシステムのこと。開発者は開発環境上にアプリケーションをデプロイし、アプリケーションの動作を短いサイクルで確認しつつ開発を行う。開発環境はクライアントPC上や共用環境上の仮想マシンなどに作られる。
ステージング環境
エンドユーザーにシステムを使ってもらう前にその動作を検証するため、本番環境に近しい状態で用意されたシステムのこと。
本番環境
実際にエンドユーザーに使ってもらうためのシステム。本番環境では運用担当者によってテストを通過したアプリケーションが展開され、展開されたアプリケーションの動作に問題がないか継続的に監視したり、万が一のデータ破損に備えてバックアップデータを取ったりといった運用が行われる。
したがって、開発者は主に開発環境とステージング環境を、運用担当者は本番環境とステージング環境をより意識してシステムを見ている。このことを念頭に置き、「開発者にとってのメリット」と「運用担当者にとってのメリット」を見ていこう。
開発者にとってのメリット
開発者にとってのメリットとしては、「開発環境を高速に展開できる」「少ないリソースで開発環境を用意できる」「すべての人に同じ開発環境を用意できる」の3点が挙げられる。
開発環境を高速に展開できる
コンテナは仮想マシンと比べて起動が高速であるため、コンテナを利用するとアプリケーションの開発環境を迅速に用意することができる。これにより、新規の開発メンバーがすぐに開発に取り掛かれるようになるので、激しいメンバー変動に強い開発チームを組成できる。
また、コンテナイメージにアプリケーションが動作するために必要なライブラリなどを事前にインストールしておけば、同じ開発環境をいくつでも用意できるため開発スピードを速めることが可能だ。
少ないリソースで開発環境を用意できる
コンテナは、稼働に際してコンテナ用の新規OS(カーネル)が不要であるため、CPU/メモリ/ストレージのリソース使用量が少ないという特徴がある。つまり、1つのマシンに仮想マシンよりも多くのコンテナを稼働できる。
これまで開発用PCでは、仮想マシンのリソース利用効率の悪さから1つの仮想マシンに複数機能を押し込めて開発を行うことが往々にあった。しかし、コンテナであれば本番環境に近い構成を少ないリソースで再現でき、開発を進めることができる。
すべての人に同じ開発環境を用意できる
仮想マシンを開発環境に利用する場合、それぞれの開発者がそれぞれのやり方で開発環境を構成することになるため、開発環境の差異が問題になることがよくある。
この問題は、仮想マシンの複製をそれぞれの開発者に配布できれば低減できる。しかし、仮想マシンのイメージは数GB以上の大容量データとなるため、容易なことではなかった。そこでコンテナを活用すると、コンテナイメージは大きくても数百MB程度の容量であるため共有が容易であり、すべての開発者に対し同じ開発環境を用意することが実現される。