DockerコンテナでOSを使用するポイントは何ですか?
ドッキングウィンドウのリポジトリでは、Ubuntuのドッキングウィンドウの画像を見つける:https://registry.hub.docker.com/_/ubuntu/ 私はドッカーは、より「アプリ」レベルであったと思いました。
では、Ubuntu DockerコンテナーとUbuntu仮想マシンの違いは何ですか?DockerコンテナーにOS全体がある場合、Dockerを使用しても意味がありませんか?
ありがとう
DockerコンテナでOSを使用するポイントは何ですか?
ドッキングウィンドウのリポジトリでは、Ubuntuのドッキングウィンドウの画像を見つける:https://registry.hub.docker.com/_/ubuntu/ 私はドッカーは、より「アプリ」レベルであったと思いました。
では、Ubuntu DockerコンテナーとUbuntu仮想マシンの違いは何ですか?DockerコンテナーにOS全体がある場合、Dockerを使用しても意味がありませんか?
ありがとう
回答:
Dockerの基本的な概念が不足しています。それはまったく別のものです。
最初に知っておく必要があるのは、Dockerの哲学です。コンテナで分離された1つのプロセスを実行します。DockerコンテナでOSを実行するのではなく、選択したLinuxディストリビューションに基づいて、ルートファイルシステムのコンテンツでコンテナ内のプロセスを実行します。Ubuntuは他の選択肢です。
ここで、ホストが実行されているLinuxディストリビューションとは異なるLinuxベースイメージ内でプロセスを実行する方法はどのようにしたらよいのか疑問に思うはずです。OSを実行するには、基本的に次のものが必要です。
Dockerは、UnionFSを使用してコンテナー内のディスクブロックのレイヤーを管理し、それらを積み重ねることができます。
舞台裏では、複数のファイルシステムを同時にマウントできるユニオンマウントを使用しており、まるで仮想ファイルシステムのように見えます。実際には、読み取り専用モードのベースルートファイルシステムの上に、読み取り/書き込みモードとしてベースイメージレイヤーをドロップします。
ここでは、ベースイメージのLinuxディストリビューションが実際のホストにインストールされた同じファイルシステムを含むように階層化されたディスクブロックの山がありますが、今回はコンテナー内にあります。
現在欠けている最後のものは、このことをどのように分離して実行するのですか?
答えは:名前空間です。元の質問から少し逸脱するため、ここでは詳細に触れません。しかし、知っておくべきことは、カーネル2.4.19以降、さまざまな種類の名前空間が長年にわたって登場していることです。現在、次の名前空間を使用できます。
名前空間は、特定の環境でプロセスを実行できるようにするカーネル内の分離された構造です。たとえば、MNTネームスペースは、ベースイメージのルートファイルシステム固有でプロセスを実行するための重要な機能です。NET名前空間は、Dockerブリッジなどと通信するためにコンテナーが特定のネットワークインターフェイスを持つためのもう1つの重要な機能になります。
したがって、はい、これのすべての主な目的は、アプリケーションを分離して実行し、コンテナーと呼ばれる箱の中で簡単にローカル環境から本番環境に出荷することです。
それをさらに掘り下げる前に、Dockerのドキュメントを読むことをお勧めします。