Docker とホストはカーネルを共有します。Docker コンテナは本質的にホスト上のプロセスです。Docker は名前空間を介してリソースの分離を実装します。Docker とホストは、基本的にカーネルの名前空間と cgroup を介してカーネルを共有します。実装されたプロセスの分離。
このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。
Docker とホストはカーネルを共有します
本質は、カーネル名前空間と cgroup を通じて実現されるプロセス分離です
Docker について話すとき、私たちは Docker の実装について話すことがよくあります。多くの開発者は、Docker コンテナが本質的にホスト マシン上のプロセスであることを知っています。 Docker は、名前空間を通じてリソースの分離を実装します。リソース制限は cgroup を通じて実装され、効率的なファイル操作はコピーオンライト メカニズムを通じて実装されます。しかし、名前空間や cgroup などの技術的な詳細を深く掘り下げると、ほとんどの開発者は困惑するでしょう。そこでここでは、まず Linux カーネルについて説明し、名前空間と cgroup の技術的な詳細を理解します。
名前空間リソース分離
リソース分離コンテナーを実装したい場合、どこから始めればよいでしょうか? chroot コマンドを最初に思い浮かべる人もいるかもしれませんが、このコマンドがユーザーに与える最も直感的な感覚は、使用後にルート ディレクトリ / のマウント ポイントが切り替わる、つまりファイル システムが分離されるということです。次に、分散環境で通信して位置を特定するには、コンテナが独立した IP、ポート、ルーティングなどを持つ必要があるため、ネットワークの分離が自然に思い浮かびます。同時に、コンテナーには、ネットワーク上でコンテナー自体を識別するための独立したホスト名も必要です。ネットワークについて考えるとき、当然通信について考えますが、プロセス間通信の分離の必要性についても考えます。開発者はアクセス許可の問題についても考えたことがあるかもしれませんが、ユーザーとユーザー グループを分離することで、ユーザーのアクセス許可の分離が実現します。最後に、コンテナ内で実行されるアプリケーションは独自の (PID) を持つ必要があり、当然のことながらホスト内の PID から分離する必要があります。
これで、コンテナに必要な 6 つの分離が基本的に完了します Linux カーネルは、表 1-1 に示すように、これら 6 つの名前空間分離システム コールを提供します。
実際、名前空間を実装する Linux カーネルの主な目的の 1 つは、軽量の仮想化 (コンテナ) サービスを実装することです。同じ名前空間内のプロセスは、互いの変更を感知できますが、外部プロセスについては何も知りません。これにより、コンテナ内のプロセスに独立したシステム環境にあるような錯覚を与え、独立性と分離を実現できます。
推奨される学習: 「docker ビデオ チュートリアル 」
以上がdocker はホストとカーネルを共有しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。