[Docker]スタディノート(2つ)

Dockerをインストールすると、ブリッジ(デフォルトでこのネットワークに接続するためのコンテナーを作成)、なし、ホストの3つのネットワークが自動的に作成されます。

ネットワークモード
前書き
ホスト コンテナは、独自のネットワークカードを仮想化したり、独自のIPを構成したりすることはありませんが、ホストのIPとポートを使用します。
ブリッジ このモードでは、各コンテナーにIPを割り当てて設定し、コンテナーをdocker0仮想ブリッジに接続し、docker0ブリッジとIptablesNATテーブル構成を介してホストと通信します。
なし このモードは、コンテナのネットワーク機能をオフにします。
コンテナ 作成されたコンテナは、独自のネットワークカードを作成して独自のIPを構成するのではなく、指定されたコンテナとIPとポート範囲を共有します。

1.デフォルトネットワーク

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

ここに画像の説明を挿入

Dockerはこれらの3つのネットワークを構築しました。コンテナーを実行するときに、この–networkフラグを使用して、ネットワークに接続するコンテナーを指定できます。

ブリッジネットワーク担当者 docker0これは、すべてのDockerインストールに存在するネットワークです。特にdocker run --network=XXX指定しないこのオプションを使用しない限り、デフォルトのDockerデーモンがこのネットワークコンテナに接続します。

ここに画像の説明を挿入

docker runDockerコンテナを作成するときに使用--netします。指定されたコンテナのネットワークモードオプションを使用できます。Dockerには次の4種類のネットワークモードがあります。

  • ホストモード:--net=host指定された使用
  • なしモード:--net=none指定に使用
  • ブリッジモード:--net=bridge指定されたデフォルト設定を使用します
  • コンテナモード:--net=container:NAME_or_ID指定された使用

2.ホストモード

これは、VMwareのブリッジモードと同等です。ホストマシンと同じネットワーク内にありますが、個別のIPアドレスはありません

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

ネットワーク名前空間は、ネットワークカード、ルーティング、Iptableルールなどを含む、独立したネットワーク環境を提供し、他のネットワーク名前空間から分離されています。Dockerコンテナには通常、独立したネットワーク名前空間が割り当てられます。ただし、コンテナの起動時にホストモードが使用されている場合、コンテナは独立したネットワーク名前空間を取得しませんが、ネットワーク名前空間をホストと共有します。コンテナは、独自のネットワークカードを仮想化したり、独自のIPを構成したりすることはありませんが、ホストのIPとポートを使用します

ここに画像の説明を挿入

ご覧のとおり、コンテナーのネットワークはホストのネットワーク(Tencent CloudのイントラネットIP)を使用していますが、ファイルシステム、プロセスリストなど、コンテナーの他の側面はホストから分離されています。

3.コンテナモード

ホストモードを理解すると、このモードは簡単に理解できます。このモードは、新しく作成されたコンテナが、ホストと共有するのではなく、既存のコンテナとネットワーク名前空間を共有することを指定します新しく作成されたコンテナは、独自のネットワークカードを作成したり、独自のIPを構成したりすることはありませんが、IP、ポート範囲などを指定されたコンテナと共有します同様に、2つのコンテナのネットワークの側面加えて、ファイルシステムやプロセスリストなどの他のものは依然として分離されています。2つのコンテナのプロセスは、IOネットワークカードデバイスを介して通信できます。

4.なしモード

このモードでは、コンテナーを独自のネットワークスタックに配置しますが、構成は実行しません。実際、このモードはコンテナのネットワーク機能をオフにします。これは、次の2つの状況で役立ちます。コンテナがネットワークを必要としない(たとえば、ディスクボリュームを書き込むバッチタスクのみ)。

5.ブリッジモード

VMwareのNatモードと同等で、コンテナは独立したネットワーク名前空間を使用し、docker0仮想ネットワークカードに接続されます(デフォルトモード)。docker0ブリッジとIptablesnatテーブル構成を介してホストと通信します。ブリッジモードはDockerのデフォルトのネットワーク設定です。このモードでは、各コンテナーにネットワーク名前空間の割り当て、IPの設定などが行われ、ホスト上のDockerコンテナーに接続されます。橋の上の仮想に。以下は、このモードに焦点を当てています。

5.1ブリッジモードのトポロジ

Dockerサーバーが起動すると、docker0という名前の仮想ブリッジがホスト上に作成され、このホスト上で起動されたDockerコンテナーがこの仮想ブリッジに接続されます。仮想ブリッジは物理スイッチのように機能するため、ホスト上のすべてのコンテナはスイッチを介してレイヤー2ネットワークに接続されます。次のステップは、コンテナにIPを割り当てることです。Dockerは、RFC1918で定義されたプライベートIPネットワークセグメントからホストとは異なるIPアドレスとサブネットを選択し、それをdocker0に割り当てます。docker0に接続されたコンテナは、このサブネットから選択します。占有されていないIPが使用されます。一般的なDockerは172.18.0.0/16ネットワークセグメントを使用し、172.18.0.1 / 16はdocker0ブリッジに割り当てられます(ip addrコマンドを使用するホスト上で、docker0は仮想ネットワークカードとして使用されるブリッジ管理インターフェイスであると見なす場合があります)ホスト上)。

これは、Tencent Cloudイントラネットが172.17.XX.XXであるためである可能性があります。したがって、デフォルトで、docker0は18ネットワークセグメントを使用します。

スタンドアロン環境でのネットワークトポロジは次のとおりです。

ここに画像の説明を挿入

5.2ブリッジネットワークモードの詳細な説明

Dockerは、上記のネットワーク構成プロセスを大まかに次のように完了します。

  1. ホスト上に仮想ネットワークカードとペアデバイスのペアを作成します。Vethデバイスは常にペアで表示され、データチャネルを形成し、データは1つのデバイスから入力され、次に別のデバイスから出力されますしたがって、vethデバイスは、2つのネットワークデバイスを接続するためによく使用されます。

  2. Dockerは、vethペアデバイスの一方の端を新しく作成されたコンテナーに配置し、eth0という名前を付けます。もう一方の端は、veth5f56268のような同様の名前にちなんで名付けられたホストに配置され、このネットワークデバイスがdocker0ブリッジに追加されます。これは、brctlshowコマンドで表示できます。

    [root@VM-0-4-centos ~]# brctl show
    bridge name	  bridge id	          STP enabled     interfaces
    docker0	      8000.0242652b8c9d   no              veth5f56268
    
  3. docker0サブネットからコンテナにIPを割り当て、docker0のIPアドレスをコンテナのデフォルトゲートウェイとして設定します。

    コンテナを実行します。

    docker run --name=nginx_bridge --net=bridge -p 80:80 -d nginx
    

    コンテナを表示します。

    docker ps
    

    ここに画像の説明を挿入

    docker inspect nginx_bridge
    

    ここに画像の説明を挿入

    docker network inspect bridge
    

    ここに画像の説明を挿入

6. --link

マイクロサービスを作成したシナリオを考えてみましょう。コンテナのIPの変更によるプロジェクトへのアクセス不能を回避するために、名前でコンテナにアクセスするにはどうすればよいですか。

ここに画像の説明を挿入

--link解決するために使用できます

docker run -d -P --name tomcat03 --link tomcat02 tomcat

ここに画像の説明を挿入

ただし、この接続は一方向です。

ここに画像の説明を挿入

実際の開発では使用しません --link

7.カスタムネットワーク

カスタムブリッジを使用して、相互に通信できるコンテナを制御することをお勧めします。また、DNSを介してコンテナ名をIPアドレスに自動的に解決することもできます。Dockerは、これらのネットワークを作成するためのデフォルトのネットワークドライバーを提供します。新しいブリッジネットワーク、オーバーレイ、またはMacvlanネットワークを作成できます。ネットワークプラグインまたはリモートネットワークを作成して、完全なカスタマイズと制御を行うこともできます。

必要な数のネットワークを作成でき、いつでもコンテナをこれらのネットワークの0個以上に接続できます。さらに、コンテナを再起動せずに、ネットワークで実行中のコンテナを接続および切断できます。コンテナが複数のネットワークに接続されている場合、その外部接続は、最初の非内部ネットワークを介して辞書式順序で提供されます。

ブリッジネットワークは、Dockerで最も一般的に使用されるネットワークタイプです。ブリッジネットワークはデフォルトのブリッジネットワークに似ていますが、いくつかの新しい機能が追加され、いくつかの古い機能が削除されています。次の例では、いくつかのブリッジネットワークを作成し、これらのネットワーク上のコンテナーでいくつかの実験を実行します。

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

ここに画像の説明を挿入

私たち自身のネットワークが作成されます:

docker network inspect mynet

ここに画像の説明を挿入

作成したネットワークでコンテナを起動します。

docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat

作成したネットワークをもう一度表示します。

docker network inspect mynet

ここに画像の説明を挿入

このとき、2つのコンテナにpingを実行できます

docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-01 --net mynet tomcat

2つのコンテナは互いにpingを実行できます。

8.ネットワーク接続

docker0ベースのコンテナーとmynetベースのコンテナーの間には相互通信がないため、ネットワーク接続が必要です。例として、tomcatが必要です。

docker run -d -P --name tomcat01 tomcat

次に、tomcat01をmynetに接続します

docker network connect mynet tomcat01

今mynetをチェックしてください

docker network inspect mynet

ここに画像の説明を挿入

パブリックIPとイントラネットIPを備えた、クラウドサーバーと同様の1つのコンテナー、2つのIP

この時点で、もう一度pingを実行できます

ここに画像の説明を挿入

しかし、tomcat02はまだpingを実行できません。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/dreaming_coder/article/details/113881431