──クラウドネイティブ・ロードを歩き続けていると、「ギュルル」とサトルのお腹が鳴った。ふと、この世界についてからご飯を食べていないことに気づく。すると、道案内人のクラフが「ここでお昼にしましょう」と提案し、どこからともなく幕の内弁当をサトルとディアに差し出した。皆で切り株の上に腰掛けて弁当を食べることになる。
サトル:「そういえば、コンテナについてはまだ何も教えてもらってないね。いつ教えてくれるの?(もぐもぐ)」
クラフ:「君は意外とせっかちだな。仕方ない。今、ここで説明することにしよう(もぐもぐ)」
ディア:「急すぎるね(もぐもぐ)」
コンテナとは、実行環境を隔離した空間のことを指すよ。コンテナ技術とは、お互いに影響しない隔離された実行環境を提供する仮想化技術を意味するんだ。
コンテナでは、アプリケーション実行に必要なプロセスのみが「パッケージ化」されて格納されているよ。
サトル:「パッケージ化?」
クラフ:「パッケージ化とは、この幕の内弁当のようなものさ。アプリケーション(鮭)やフレームワーク(卵焼き)、ライブラリ(突き出し)、Linux基本コマンド(ご飯)などのプロセスが1つのお弁当箱に盛り付けられているイメージだよ。逆にOSやデータベースなどは含まれていないんだ」
コンテナは実行環境を隔離した空間
●「コンテナ技術」とは、互いに影響しない
隔離された実行環境を提供する技術
●「コンテナ」は、実行環境を隔離した空間で、
アプリケーション実行に必要なプロセスのみが
パッケージ化されて格納されている
クラフ:「コンテナでは、コンテナアプリとアプリの実行環境のみがパッケージ化され独立しているため、ある環境から別の環境へとすぐに迅速に確実に実行できる、つまり『ポータビリティ』があることも特長の1つだよ」
ディア:「ポータビリティがあるって、つまりどういうことなの?」
クラフ:「たとえば、コンテナはパッケージ化されたお弁当箱なんだ。それぞれ簡単に持ち運びができるよね? 好きな場所でお弁当を開いて食べることができる、つまりコンテナはどこへでも動かせるんだ」
サトル:「それがポータビリティがあるってことなんだね」
コンテナは独立しており“ポータビリティ”がある
アプリとアプリの実行環境のみがパッケージ化され
独立しているため、環境から別の環境へと
迅速で確実に実行される
クラフ:「コンテナは、それ自体にデータを保存できる空間がないプロセスというものなんだ。コンテナによって作成されたデータを残すためには、それを保存する別の空間である『データボリューム』をコンテナとマウント(取り付ける)する必要があるのさ。そうしたデータボリュームを提供するストレージを『永続ストレージ(Persistent Volume)』と言うんだよ」
ディア:「それもコンテナの特長の1つなの?」
クラフ:「うん、そうだよ。失ってはいけないデータを外に出すように設計されているのがコンテナなんだ」
コンテナ内には、データを保存できない
コンテナ自体にはデータが保存できる空間が無く、
データを保存したい場合は別空間が必要。
失ってはならないデータは、外に出すように設計されている。
サトル:「コンテナには他にどういった特長があるの?」
クラフ:「そうだね、コンテナはプロセスの実行空間を隔離する技術ってことかな。コンテナ自身に特定の機能があるわけではないよ。Linuxカーネルの機能であるネームスペース(namespace)、コントロールグループ(cgroup)の機能を利用して動くものなんだ」
ネームスペースとは、特定のプロセスに対して、他のプロセスから分離した状態を提供する機能だよ。また、コントロールグループとは、CPUやメモリなど物理的なリソースを割り当てる機能なのさ。
コンテナは、プロセスの実行空間を隔離する技術