第5章. コンテナを使う
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
前章では、Dockerイメージの構築方法と、出来上がったイメージをコンテナ内で実行するために必要な非常に基本的な手順について学んだ。この章では、まずコンテナ技術の歴史を見てから、コンテナの実行に深入りし、コンテナが受け取る全体的な構成、リソース、権限を制御するDockerコマンドを探求する。
コンテナとは何か?
VMwareやKVMのような仮想化 システムをご存じだろう。このシステムでは、ハイパーバイザとして一般的に知られている仮想化レイヤの上で、完全なLinuxカーネルとオペレーティング・システムを実行することができる。VMwareやKVMのような仮想マシンは、ハイパーバイザーとして知られる仮想化レイヤーの上で完全なLinuxカーネルとオペレーティング・システムを動作させることができる。このアプローチでは、各仮想マシンがハードウェア仮想化レイヤーの上の別のメモリ空間にある独自のオペレーティング・システム・カーネルをホストするため、ワークロード間の分離が非常に強力になる。
コンテナは基本的に とは異なる。コンテナはすべて単一のカーネルを共有し、ワークロード間の分離はすべてその単一のカーネル内で実装されるからだ。これはオペレーティングシステムの仮想化と呼ばれている。
libcontainer READMEにコンテナの定義が簡潔に書かれている:
コンテナは、ホストシステムのカーネルを共有し、システム内の他のコンテナから(オプションで)分離された、自己完結型の実行環境である。
コンテナの主な利点の1つは、リソースの効率化だ。分離されたワークロードごとに、システム全体のインスタンスを必要としないからだ。カーネルを共有しているため、分離されたタスクとその下にある実際のハードウェアの間にあるインダイレクトのレイヤーが1つ減る。コンテナ内でプロセスが実行されているとき、コンテナを管理するカーネル内にはほんの少しのコードしかない。これと対照的なのが仮想マシンで、そこでは2つ目のレイヤーが実行されることになる。仮想マシンでは、プロセスからハードウェアやハイパーバイザへの呼び出しは、プロセッサの特権モードを2回出たり入ったりする必要がある。
注
libcontainerはGoライブラリ で、アプリケーションからLinuxコンテナを管理するための標準インタフェースを提供するように設計されている。
しかしコンテナ・アプローチは、基盤となるカーネルと互換性のあるプロセスしか実行できないことを意味する。例えば、VMwareやKVMのような技術によって提供されるハードウェア仮想化とは異なり、WindowsアプリケーションはLinuxホスト上のLinuxコンテナ内でネイティブに実行することはできない。しかし、WindowsアプリケーションはWindowsホスト上のWindowsコンテナ内で実行できる。つまりコンテナは、コンテナ・サーバーのカーネルと互換性のあるお気に入りのアプリケーションやデーモンを実行できる、OS固有のテクノロジーとして考えるのがベストだ。コンテナについて考えるときは、仮想マシンについてすでに知っているようなことはなるべく捨てて、代わりにコンテナを、サーバ上で実行される通常のプロセスのラッパーとして概念的にはとらえるべきだ。
注
仮想マシン内でコンテナを実行できることに加え、コンテナ内でVMを実行することも完全に可能だ。そうすれば、Linuxコンテナ内で実行されているWindows ...
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