Docker ネットワーキングの概念の説明
基本的にDocker ネットワーク は、ホスト マシンを介して Docker コンテナと外部世界との間の通信を確立するために使用されます。または、分離されたすべてのコンテナがさまざまな状況で相互に通信して実行するための通信通路であるとも言えます。必要なアクション。このガイドでは、Ubuntu での実践的な例を使用して、基本的な Docker ネットワーキングの概念を説明します。
Docker をまだインストールしていない場合は、次のガイドを参照してください。
- Ubuntu 18.04 LTS サーバーに Docker をインストールする方法
Docker の使い方の基本:
- Docker の使用を開始する
Docker ネットワーキングの概念の説明
以下にリストされているすべてのコマンドは、Ubuntu 上のroot 権限を使用してテストされています。
新しいネットワークの作成、ネットワークへのコンテナの接続、ネットワークからのコンテナの切断、利用可能なネットワークの一覧表示、ネットワークの削除などのネットワーク操作を管理するには、次のコマンドを使用します。
docker network
Docker ネットワークドライバーの種類
すべてのネットワークを一覧表示するには、次を実行します。
docker network ls
それらすべてについて簡単に紹介しましょう。
- ブリッジ ネットワーク : Docker を起動すると、デフォルトのブリッジ ネットワークが自動的に作成されます。新しく起動したコンテナは自動的に接続します。ユーザー定義のカスタム ブリッジ ネットワークを作成することもできます。ユーザー定義のブリッジ ネットワークは、デフォルトのブリッジ ネットワークよりも優れています。
- ホスト ネットワーク : コンテナと Docker ホスト間のネットワーク分離を削除し、ホストのネットワークを直接使用します。ポート 80 にバインドするコンテナを実行し、ホスト ネットワークを使用する場合、コンテナのアプリケーションはホストの IP アドレスのポート 80 で使用できます。これは、ポートがホスト ネットワーク内のすべてのコンテナに共通になったため、同じホスト上、同じポート上で複数の Web コンテナを実行できなくなることを意味します。
- なしネットワーク : この種類のネットワークでは、コンテナはどのネットワークにも接続されず、外部ネットワークや他のコンテナにアクセスできません。したがって、このネットワークは、コンテナ上のネットワーク スタックを完全に無効にする場合に使用されます。
- オーバーレイ ネットワーク : swarm クラスターに参加しているすべてのノードにまたがる内部プライベート ネットワークを作成します。そのため、オーバーレイ ネットワークは、Docker swarm サービスとスタンドアロン コンテナーの間、または異なる Docker デーモン上の 2 つのスタンドアロン コンテナー間の通信を容易にします。
- Macvlan ネットワーク : 一部のアプリケーション、特にレガシー アプリケーションやネットワーク トラフィックを監視するアプリケーションは、物理ネットワークに直接接続されることを想定しています。このような状況では、Macvlan ネットワーク ドライバーを使用して各コンテナの仮想ネットワーク インターフェイスに MAC アドレスを割り当て、仮想ネットワーク インターフェイスが物理ネットワークに直接接続されているように見せることができます。
ブリッジ ネットワークとホスト ネットワークに関する実践的な演習を紹介します。
1. ブリッジネットワーク
このタイプのネットワークを説明するために 2 つの Alpine コンテナを使用します。
次に、コマンドを使用して 2 つの Alpine コンテナ、C1 と C2 を実行します。
docker run -it -d --name c1 alpine ash
docker run -it -d --name c2 alpine ash
次に、実行中のコンテナの IP アドレスを調べてみましょう。これを行うには、次を実行します。
docker exec -it c1 sh –c “ip a”
docker exec -it c2 sh –c “ip a”
ご覧のとおり、C1 コンテナの IP アドレスは 172.17.0.2 で、C2 コンテナの IP アドレスは172.17.0.3 です。
それでは、お互いに ping を実行して、通信できるかどうかを確認してみましょう。
まず、実行中の C1 コンテナに接続し、C2 コンテナに ping を実行します。
docker attach c1
Ping –c 2 172.17.0.3
同様に、C2 コンテナに接続し、C1 コンテナに ping を試みます。
docker attach c2
Ping –c 2 172.17.0.2
上のスクリーンショットでわかるように、同じネットワーク内のコンテナ間で通信が行われています。
次のコマンドを使用してブリッジ ネットワークを検査することによって、それを確認することもできます。
docker network inspect bridge
上記のコマンドは、ネットワーク タイプ、サブネット、ゲートウェイ、コンテナ名、iip アドレスなど、ネットワークに関するすべての情報を表示します。
1.1 ユーザー定義のブリッジネットワークの作成
すでに述べたように、Docker を起動するとデフォルトのブリッジ ネットワークが自動的に作成されます。新しく開始されたすべてのコンテナは自動的にそれに接続します。ただし、ユーザー定義のカスタム ブリッジ ネットワークを作成することもできます。
新しいネットワークドライバーを作成するには、次のコマンドを実行します。
docker network create my_net
または、
docker network create --driver bridge dhruv_net
どちらのコマンドも同じ動作を行います。ドライバー名を指定しない場合は、デフォルトのネットワークドライバー、つまりブリッジに作成されます。
dhruv_net のようなユーザー定義のネットワークでは、コンテナは IP アドレスで通信できるだけでなく、コンテナ名を IP アドレスに解決することもできます。この機能は自動サービス検出と呼ばれます。
コンテナが相互に通信できるかどうかを確認するために、dhruv_net< 上で 3 つの alpine コンテナ、A1、A2、A3 を実行してみましょう。 先ほど作成したネットワーク。
docker run -it -d --name A1 --network dhruv_net alpine ash
docker run -it -d --name A2 --network dhruv_net alpine ash
docker run -it -d --name A3 --network dhruv_net alpine ash
ここで、コンテナのいずれか 1 つに接続し、コンテナ名を使用して他の 2 つに対して ping を実行してみます。
上記のスクリーンショットから、コンテナが相互に通信できることが証明されています。
2. ホストネットワーク
ホスト ネットワークを使用してポート 80 にバインドするコンテナを実行しています。コンテナのアプリケーションはホストの IP アドレスのポート 80 で利用できます。
ホスト ネットワークは、非常に特殊なネットワークでプログラムを実行する場合にのみ必要です。 Docker コンテナ内で実行されているアプリケーションは、ネットワークの観点からは、ホスト自体上で実行されているように見えます。これにより、コンテナは通常よりも多くのネットワーク アクセスが可能になります。
ここでは、netstat -ntlp コマンドを使用して、サーバー上のリスニング ポートを表示しました。特定のポートでリッスンしているサービスを確認するには、このガイドを参照してください。
ここでは、Docker ネットワークの概念の基本のみを説明しました。詳細については、以下に添付されている Docker ネットワーキング ガイドを参照することをお勧めします。
- Docker コンテナ ネットワーキング
推奨読書:
- Docker ボリュームの説明
- 実行中の Docker コンテナを自動的に更新する方法
- ctop – Linux コンテナ用のコマンドライン監視ツール
- Porttainer – Docker を管理する最も簡単な方法
- PiCluster – シンプルな Web ベースの Docker 管理アプリケーション
- Dockly – ターミナルから Docker コンテナを管理
著者について:
Dhruv Tiwari 氏 は自動化が大好きな DevOps エンジニアで、Linux を大規模に操作し、システムが Linux ボックスにログインする必要がないほど賢くなる日を夢見ています。ソース コードからコードのデプロイメント、本番環境に至るまでの CI/CD の旅。