Dockerネットワーキング 基本的には、ホストマシンを介してDockerコンテナと外界との間の通信を確立するために使用されます。または、必要なアクションを実行するために、さまざまな状況ですべての分離されたコンテナが相互に通信する通信通路であると言えます。このガイドでは、基本的なDockerネットワークの概念とUbuntuの実際の例を説明します。
Dockerをまだインストールしていない場合は、次のガイドを参照してください。
- Ubuntu18.04LTSサーバーにDockerをインストールする方法
Dockerの使用の基本:
- Docker入門
Dockerネットワークの概念の説明
以下にリストされているすべてのコマンドは、 rootでテストされています Ubuntuの特権 。
新しいネットワークの作成、コンテナのネットワークへの接続、コンテナのネットワークからの切断、使用可能なネットワークの一覧表示、ネットワークの削除などのネットワーク操作を管理するには、次のコマンドを使用します。
# docker network
Dockerネットワークドライバーの種類
すべてのネットワークを一覧表示するには、次を実行します:
# docker network ls
それらすべてについて簡単に紹介しましょう。
- ブリッジネットワーク: Dockerを起動すると、デフォルトのブリッジネットワークが自動的に作成されます。新しく起動したコンテナが自動的に接続されます。ユーザー定義のカスタムブリッジネットワークを作成することもできます。ユーザー定義のブリッジネットワークは、デフォルトのブリッジネットワークよりも優れています。
- ホストネットワーク: コンテナとDockerホスト間のネットワーク分離を取り除き、ホストのネットワークを直接使用します。ポート80にバインドするコンテナを実行し、ホストネットワークを使用する場合、コンテナのアプリケーションは、ホストのIPアドレスのポート80で使用できます。ポートがホストネットワーク内のすべてのコンテナに共通になっているため、同じポートで複数のWebコンテナを実行できないことを意味します。
- ネットワークなし: この種のネットワークでは、コンテナはどのネットワークにも接続されておらず、外部ネットワークや他のコンテナにアクセスできません。したがって、このネットワークは、コンテナのネットワークスタックを完全に無効にする場合に使用されます。
- オーバーレイネットワーク: スウォームクラスターに参加しているすべてのノードにまたがる内部プライベートネットワークを作成します。そのため、オーバーレイネットワークは、Docker Swarmサービスとスタンドアロンコンテナ間、または異なるDockerデーモン上の2つのスタンドアロンコンテナ間の通信を容易にします。
- Macvlanネットワーク: 一部のアプリケーション、特にレガシーアプリケーションやネットワークトラフィックを監視するアプリケーションは、物理ネットワークに直接接続されていることを想定しています。このタイプの状況では、Macvlanネットワークドライバーを使用して、各コンテナーの仮想ネットワークインターフェイスにMACアドレスを割り当て、物理ネットワークに直接接続された物理ネットワークインターフェイスのように見せることができます。
ブリッジネットワークとホストネットワークの実践的な演習を紹介させてください。
1。ブリッジネットワーク
このタイプのネットワークを説明するために、2つのアルパインコンテナを使用します。
次に、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アドレスに解決することもできます。この機能は、自動サービス検出と呼ばれます 。
コンテナが相互に通信できるかどうかを確認するために、3つの高山コンテナ( A1 )を実行してみましょう。 、 A2 およびA3 dhruv_netで 以前に作成したネットワーク。
# 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
次に、コンテナのいずれかに接続し、コンテナ名を使用して他の2つにpingを実行してみます。
上記のスクリーンショットから、コンテナが相互に通信できることが証明されています。
2。ホストネットワーク
ホストネットワークを使用してポート80にバインドするコンテナを実行しています。コンテナのアプリケーションは、ホストのIPアドレスのポート80で利用できます。
ホストネットワークは、非常に特定のネットワークでプログラムを実行している場合にのみ必要です。 Dockerコンテナー内で実行されているアプリケーションは、ネットワークの観点からは、ホスト自体で実行されているように見えます。これにより、コンテナは通常よりも多くのネットワークアクセスが可能になります。
ここでは、 netstat -ntlpを使用しました サーバーのリスニングポートを表示するコマンド。特定のポートでリッスンしているサービスを見つけるには、このガイド 。
Dockerネットワークの概念の基本についてのみ説明しました。詳細については、以下に添付されているDockerネットワークガイドを参照することをお勧めします。
- Docker Container Networking
推奨される読み物:
- Dockerボリュームの説明
- 実行中のDockerコンテナを自動的に更新する方法
- ctop –Linuxコンテナ用のコマンドライン監視ツール
- Portainer –Dockerを管理する最も簡単な方法
- PiCluster –シンプルなWebベースのDocker管理アプリケーション
- Docker –ターミナルからDockerコンテナを管理する
作成者について:
Dhruv Tiwari は、自動化が大好きで、Linuxを大規模に操作し、システムがLinuxボックスにログインする必要がないほどスマートになる日の夢を見るDevOpsエンジニアです。ソースコードからコード展開、本番環境へのCI/CDの旅。