Dockerネットワークモードの詳しい説明

目次

Dockerネットワークモード

1. ホストモード

2、コンテナモード

3 つなしモード

4、ブリッジモード

5、オーバーレイモード


Dockerネットワークモード

        Docker をインストールすると 3 つのネットワークが自動的に作成され、docker network ls コマンドを使用してこれらのネットワークを一覧表示できます。

[root@docker ~]# docker network ls

        docker run を使用してコンテナーを作成する場合、--netオプションを使用してコンテナーのネットワーク モードを指定できます。

Docker には次の 4 つのネットワーク モードがあります。

ホストモード: --net=host を使用して指定します。

コンテナ モード: --net=container:NAME_or_ID を使用して指定します。

なしモード: --net=none を使用して指定します。

ブリッジ モード: --net=bridge を使用して指定します (デフォルト設定)。

1. ホストモード

        Docker の最下層は、Linux 名前空間テクノロジーを使用して、PID 名前空間分離プロセス、マウント名前空間分離ファイル システム、ネットワーク名前空間分離ネットワークなどのリソースを分離します。

        ネットワーク名前空間は、他のネットワーク名前空間から分離された、ネットワーク カード、ルート、Iptables ルールなどの独立したネットワーク環境を提供します。

        Docker コンテナには通常、独立したネットワーク名前空間が割り当てられます。ただし、コンテナーの起動時にホスト モードが使用される場合、コンテナーは独立したネットワーク名前空間を取得せず、ルート ネットワーク名前空間をホストと共有します。コンテナは独自のネットワーク カードを仮想化したり、独自の IP を設定したりすることはなく、ホストの IP とポートを使用します。このネットワーク モードは、セキュリティ上の理由から推奨されません。

        192.168.100.131/24 マシン上でホスト モードで WEB アプリケーションを使用して Docker コンテナを起動し、TCP ポート 80 をリッスンします。コンテナ内で ifconfig コマンドを実行してネットワーク環境を表示すると、ホスト上の情報だけが表示されます。

        外部からコンテナ内のアプリケーションにアクセスするには、ホスト マシンで直接実行しているのと同じように、NAT 変換を行わずに 192.168.100.131:80 を直接使用できます。

        ただし、ファイル システム、プロセス リストなど、コンテナーの他の側面は依然としてホストから分離されています。

[root@docker ~]# docker run -itd --net=host --name=hostbusybox

[root@docker ~]# docker exec -it host ifconfig

[root@docker ~]# ifconfig

注: この 2 つはまったく同じであり、仮想マシンのホストオンリー モードに相当します。

2、コンテナモード

        このモードでは、新しく作成されたコンテナがネットワーク ネームスペースをホストと共有するのではなく、既存のコンテナと共有するように指定できます。

         新しく作成されたコンテナは、独自のネットワーク カードを作成したり、独自の IP を構成したりすることはありませんが、指定されたコンテナと IP、ポート範囲などを共有します。

        同様に、2 つのコンテナーのネットワーク面に加えて、ファイル システムやプロセス リストなどの他のものも依然として分離されています。2 つのコンテナのプロセスは、ネットワーク カード デバイスを介して通信できます。

        --net=container:container_id/container_name を使用すると、共通のネットワークを使用する複数のコンテナから認識される IP は同じになります。

[root@docker ~]# docker run -itd --name=con1busybox

[root@docker ~]# docker exec -it con1 ifconfig

[root@docker ~]# docker run -itd --net=container:con1 --name=con2busybox

[root@docker ~]# docker exec -it con2 ifconfig

  追伸: 双子と同様に、同じネットワーク カード情報を使用してください。

3 つなしモード

        このモードでは、Docker コンテナーには独自のネットワーク名前空間がありますが、Docker コンテナーのネットワーク構成は実行されません。

        つまり、この Docker コンテナにはネットワーク カード、IP、ルーティングなどの情報がありません。Dockerコンテナのネットワークカードの追加やIPの設定などは自分で行う必要があります。

--net=none で指定すると、このモードではネットワークは構成されません。

[root@docker ~]# docker run -itd --name=none --net=nonebusybox

[root@docker ~]# docker exec -it none ifconfig

4、ブリッジモード

        ブリッジ モードは、 NAT ネットワーク モデルに属する Docker のデフォルトのネットワーク設定です。Docker デーモンが起動すると、docker0 ブリッジ (-b パ​​ラメーターで指定) が確立されます。各コンテナーがブリッジ モードの使用を開始すると、Dockerコンテナは仮想ネットワーク インターフェイス (veth ペア) デバイスのペアを作成します。その一端はコンテナのネットワーク名前空間にあり、もう一端は docker0 にあり、コンテナとホスト間の通信を実現します。

        ブリッジ モードでは、Docker コンテナと外部ネットワーク間の通信は iptables ルールによって制御されます。これは、Docker ネットワークのパフォーマンスが低下する重要な理由でもあります。

iptables -vnL -t nat        を使用してNAT テーブルを表示すると、Chain Docker のコンテナー ブリッジング ルールを確認できます。

[root@docker ~]# iptables -vnL -t nat

5、オーバーレイモード

        これは、Docker のネイティブのクロスホスト マルチサブネット ネットワーク モデルです。新しいネットワークを作成するとき、Docker はホスト上にネットワーク ネームスペースを作成します。ネットワーク ネームスペースにはブリッジがあり、ブリッジには vxlan インターフェイスがあります。ネットワークは vxlan ID を占有します。コンテナがネットワークに追加されると、Docker はブリッジ モードと同様に、一対の veth ネットワーク カード デバイスを割り当てます。一方の端はコンテナ内にあり、もう一方の端はローカル ネットワーク ネームスペース内にあります。

        コンテナ A、B、および C はすべてホスト A 上にあり、コンテナ D および E はホスト B 上にあります。 ここで、オーバーレイ ネットワーク モデルを通じて、コンテナ A、B、および D は同じサブネット内にあり、コンテナ C と E は同じサブネット内にあります。サブネット内の別の場所にあります。

        オーバーレイには vxlan ID があり、値の範囲は 256 ~ 1000 です。vxlan トンネルは、各ネットワーク サンドボックスを同じ ID で接続してサブネットを形成します。

おすすめ

転載: blog.csdn.net/2302_77582029/article/details/132106721