第11章. コンテナ技術:DockerとDocker Compose
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
仮想化技術は、IBMメインフレームの時代から存在している。ほとんどの人はメインフレームで仕事をする機会はないが、本書の読者の中には、HPやDellといったメーカーのベアメタルサーバをセットアップしたり使ったりしなければならなかった時代を覚えている人もいるはずだ。これらのメーカーは今でも存在しており、ドットコム時代の古き良き時代のように、コロケーション施設でホスティングされたベアメタルサーバを使うこともできる。
しかし、ほとんどの人が仮想化というと、メインフレームを自動的に思い浮かべることはないだろう。その代わりに、VMware ESXやCitrix/Xenなどのハイパーバイザ上でFedoraやUbuntuなどのゲスト・オペレーティング・システム(OS)を実行する仮想マシン(VM)を想像する人がほとんどだろう。通常のベアメタルサーバーに対するVMの大きな利点は、VMを使用することで、サーバーのリソース(CPU、メモリ、ディスク)を複数の仮想マシンに分割して最適化できることだ。また、対象となるOSごとに専用サーバを購入するのではなく、1台の共有ベアメタルサーバ上で複数のオペレーティングシステムをそれぞれVMで実行することもできる。Amazon EC2のようなクラウド・コンピューティング・サービスは、ハイパーバイザや仮想マシンがなければ実現しなかっただろう。各仮想マシンは独自のOSカーネルを実行するため、この種の仮想化はカーネルレベルと呼びうる。
より多くの利益を得るための終わりなき探求の中で、人々は仮想マシンが依然としてリソースの面で無駄が多いことに気づいた。次の論理的なステップは、個々のアプリケーションを独自の仮想環境に隔離することだった。これは、同じOSカーネル内でコンテナを実行することで実現された。この場合、ファイルシステムレベルで分離された。Linuxコンテナ(LXC)とSun Solarisゾーンは、このような技術の初期の例だった。これらの欠点は、使いにくいことと、実行するOSに密結合していることだった。コンテナ利用における大きなブレークスルーは、Dockerがファイルシステムレベルのコンテナを管理・実行する簡単な方法を提供し始めたときに訪れた。
Dockerコンテナとは何か?
Dockerコンテナは、アプリケーションを、実行に必要な他のソフトウェアパッケージやライブラリとともにカプセル化する。DockerコンテナとDockerイメージという言葉を同じように使うことがあるが、違いがある。アプリケーションをカプセル化したファイルシステムレベルのオブジェクトはDockerイメージと呼ばれる。そのイメージを実行すると、Dockerコンテナになる。
同じOSカーネルを使用して、多数のDockerコンテナを実行できる。唯一の要件は、コンテナを実行したいホストにDockerエンジンまたはDockerデーモンと呼ばれるサーバ側コンポーネントをインストールすることだ。こうすることで、ホストのリソースをコンテナ間でより細かく分割して利用することができ、より多くの利益を得ることができる。
Dockerコンテナは、通常のLinuxプロセスよりも高い分離性とリソース制御を提供するが、本格的な仮想マシンと比べるとその機能は低い。このような分離とリソース制御の特性を実現するために、Dockerエンジンは名前空間、制御グループ(cgroups)、ユニオン・ファイル・システム(UnionFS)といったLinuxカーネルの機能を利用している。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access