OS Dockerコンテナー:VMとの違いは何ですか?


10

DockerコンテナでOSを使用するポイントは何ですか?

ドッキングウィンドウのリポジトリでは、Ubuntuのドッキングウィンドウの画像を見つける:https://registry.hub.docker.com/_/ubuntu/ 私はドッカーは、より「アプリ」レベルであったと思いました。

では、Ubuntu DockerコンテナーとUbuntu仮想マシンの違いは何ですか?DockerコンテナーにOS全体がある場合、Dockerを使用しても意味がありませんか?

ありがとう

回答:


11

Dockerの基本的な概念が不足しています。それはまったく別のものです。

最初に知っておく必要があるのは、Dockerの哲学です。コンテナで分離された1つのプロセスを実行します。DockerコンテナでOSを実行するのではなく、選択したLinuxディストリビューションに基づいて、ルートファイルシステムのコンテンツでコンテナ内のプロセスを実行します。Ubuntuは他の選択肢です。

ここで、ホストが実行されているLinuxディストリビューションとは異なるLinuxベースイメージ内でプロセスを実行する方法はどのようにしたらよいのか疑問に思うはずです。OSを実行するには、基本的に次のものが必要です。

  • ブートファイルシステム:ブートローダーとカーネルは、ロードされるとメモリに常駐します。カーネルはホストと共有され、すべてのLinuxディストリビューション間で共通の部分であるため、Dockerコンテナーの場合、これについては気にしません。
  • ルートファイルシステム:ファイルシステム構造が含まれています。Linuxディストリビューションによって異なる場合があります。起動シーケンスが完了するまでは読み取り専用です。

Dockerは、UnionFSを使用してコンテナー内のディスクブロックのレイヤーを管理し、それらを積み重ねることができます。

舞台裏では、複数のファイルシステムを同時にマウントできるユニオンマウントを使用しており、まるで仮想ファイルシステムのように見えます。実際には、読み取り専用モードのベースルートファイルシステムの上に、読み取り/書き込みモードとしてベースイメージレイヤーをドロップします。

ここでは、ベースイメージのLinuxディストリビューションが実際のホストにインストールされた同じファイルシステムを含むように階層化されたディスクブロックの山がありますが、今回はコンテナー内にあります。

現在欠けている最後のものは、このことをどのように分離して実行するのですか?

答えは:名前空間です。元の質問から少し逸脱するため、ここでは詳細に触れません。しかし、知っておくべきことは、カーネル2.4.19以降、さまざまな種類の名前空間が長年にわたって登場していることです。現在、次の名前空間を使用できます。

  • IPC:IPC名前空間(プロセス間通信)
  • MNT:名前空間をマウント
  • NET:ネットワーク名前空間
  • PID:pid名前空間
  • USER:ユーザー名前空間(uid)
  • UTS:UTS名前空間(ホスト名)

名前空間は、特定の環境でプロセスを実行できるようにするカーネル内の分離された構造です。たとえば、MNTネームスペースは、ベースイメージのルートファイルシステム固有でプロセスを実行するための重要な機能です。NET名前空間は、Dockerブリッジなどと通信するためにコンテナーが特定のネットワークインターフェイスを持つためのもう1つの重要な機能になります。

したがって、はい、これのすべての主な目的は、アプリケーションを分離して実行し、コンテナーと呼ばれる箱の中で簡単にローカル環境から本番環境に出荷することです。

それをさらに掘り下げる前に、Dockerのドキュメントを読むことをお勧めします。


:おかげで、それはこのような「Ubuntuの」イメージという意味でしょregistry.hub.docker.com/_/ubuntuは、それ自体で「何の意味」を行わず、「nginxのコンテナ」のような、より定義されたコンテナのための拠点として?意味が分からないのですか?
マイケル

そうです。それはまさにそれが使われているものです。そして通常、このために人々がそれらをベースイメージと呼ぶのを聞くでしょう。
Xavier Lucas

ドキュメントを確認しましたが、確信が1つありません。ubuntuイメージのサイズが140Mbであるとしましょう。次に、この画像に基づく別の画像は、さらに10 Mbを追加します。このイメージから2つのコンテナーを実行する場合、各コンテナーは150Mbであり、300Mbのディスク領域が必要ですか、それとも合計サイズは150Mbのままですか?ありがとう
Michael

うわー、私は公式のpythonイメージをダウンロードしました。仮想サイズは802.4 MBです。ダウンロードに時間がかかりました。そこから10個のコンテナーを実行すると、コンテナーはどのくらいのスペースを取りますか?ありがとう
Michael

2
@YAmikep一部のイメージは、依存関係が適切にクリーンアップされていないために大きくなる場合があります。同じイメージで10個のコンテナーを開始しても、使用されるディスク容量がイメージのサイズの10倍になるとは限りません。イメージを一度ダウンロードして、複数のコンテナから実行します。Dockerは、同じイメージから複数のコンテナーを実行するときにコピーオンライトを使用します。つまり、コンテナー間でイメージを共有し、コンテナーがイメージを追加または変更した場合にのみ、イメージ内にファイルのプライベートコピーを作成します。したがって、使用される実際のサイズは、実行回数ではなく、コンテナ内のアクティビティにリンクされます。
Xavier Lucas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.