コンテナのメリット
コンテナは、CI/CDやDevOpsを実現するための重要な技術です。コンテナを理解しようとするには、仕組みよりも先にそのメリットを理解する方がよいでしょう。理解にあたっては、主に仮想マシンと比較するとそのメリットが分かりやすいでしょう。
起動が早い
コンテナは、通常のプログラムを実行するのと同じ仕組みで起動されるため、とても早く起動できます。これがたとえば仮想マシンであれば、OSの起動から各種プロセスの起動、そしてプログラムの起動の順番となるため、起動が完了するまでかなりの時間がかかります。
メモリを消費しない
コンテナは、プログラムしか起動しないので、メモリの消費はプログラムの分だけで済みます。仮想マシンはOSや各種プロセスもメモリを消費するため、沢山起動するとそれだけ重複してメモリを消費することになります。
各コンテナは別々のものとして扱われる
コンテナが複数起動している時、それぞれのコンテナは別々のものとして扱われます。Aという設定のプログラムと、Bという設定のプログラムを起動したい時、コンテナはAとBのコンテナを起動するだけで済みますが、仮想マシンの場合には2つの仮想マシンを起動する必要があります。
これらの要因は相互に密接に関係しており、これらの特長が相まってコンテナは非常にコンパクトで俊敏なアプリケーション実行環境を実現しています。そのメリットが、DevOpsを実現するための大きな力となっています。
コンテナの技術的な特長
コンテナのメリットを理解した上で、コンテナがどのような技術で成り立っているのかを見てみましょう。
コンテナは単一のOSカーネル上で動作します
コンテナは、コンテナホストと呼ばれるシステム上で動作します。このコンテナホストは、単一のOSカーネルで動作します。そのため、コンテナ毎にカーネルのバージョンを変えたりすることはできません。カーネルのバージョンアップなどに伴ってコンテナホストの再起動が行われる際には、そのホストで動作しているコンテナはすべて停止する必要があります。
コンテナはプロセスです
コンテナは基本的に単一のプログラムを実行しますが、これはOSカーネルから見ると単なるプロセスとして扱われます。コンテナの起動が早い理由がここにあります。
コンテナは独立したファイルシステムを持ちます
各コンテナは、それぞれ独立したファイルシステムを持ちます。Linuxであれば、ルートディレクトリ以下のディレクトリ構造をそれぞれのコンテナが持つことになります。このファイルシステムは、コンテナイメージとして用意されることになります。コンテナで動作するプログラムに必要なファイルなどは、あらかじめコンテナイメージの中に配置しておく必要があります。
コンテナをうまく活用する事が、DevOpsにおいては必須となりつつあります。開発用途だけでなく、本番システムにおいてもコンテナを活用することも多いので、しっかりとコンテナについて理解しておきたいですね。そのためにも、コンテナ実行環境であるDockerや、コンテナを沢山動かす際にオーケストレーションツールとして活用するKubernetesについても理解を深めておきましょう。