テクノロジー DEVOPS 非公開: Docker ネットワーキング 101

Docker ネットワーキング 101

Docker は、開発者がアプリケーションを構築して実行できる優れたツールです。

興味深い事実: サービスとしてのプラットフォーム (PaaS) 企業である DotCloud が、実際にこれを内部ツールとして作成しました。

しかし、同社はすぐにその真の可能性に気づき、2013 年にオープンソース プロジェクトとして利用できるようにしました。現在、Docker Inc として知られているものは、 Docker Inc です。すぐに人気が高まり、ユーザー数は数万となり、Red Hat、IBM、Microsoft、Google、Cisco Systems などの企業と大規模なパートナーシップを結んでいます。

今日のソフトウェア開発では、機敏性と迅速な変更への対応が求められます。私たちはストーリーポイントで自分たちの仕事を評価し、スタンドアップに参加し、スクラムなどの方法論を使用します。 Docker は私たちの俊敏性をサポートしてくれます。

ソフトウェア開発の展開フェーズには多額の費用がかかることを認識する必要があります。ここで Docker プラットフォームが登場します。Docker プラットフォームは、OS レベルの仮想ソフトウェアを使用してソフトウェアをコンテナーに配置することで、デプロイメントを簡素化します。

ドッカーハブ
ドッカーハブ

このプラットフォームの優れた点は、アプリケーションとそのすべての依存関係 (バイナリ、ライブラリ、構成ファイル、スクリプト、jar など) が 1 つの使いやすいパッケージにバンドルされていることです。これはシンプルで標準化されたアプローチであり、どこのソフトウェア開発者にとっても作業が楽になります。

Docker によりプラットフォーム間のコラボレーションとネットワーキングが簡素化される

Docker が登場する前は、開発パイプラインでのソフトウェアの移動を管理するには、仮想マシン、構成管理ツール、パッケージ管理システム、ライブラリ依存関係の複雑な網目などのテクノロジーの組み合わせが必要になるのが一般的でした。これらのツールを保守および管理するには、熟練したエンジニアが必要でした。最も必要なカスタマイズ設定。

Docker は、このプロセスに参加するすべてのエンジニアが単一言語でコミュニケーションできるようにすることでこれを変更し、コラボレーションを簡素化しました。

Docker コンテナは、ホスト マシンを通じて、Docker ネットワークを使用して相互に通信したり、外部の世界と通信したりします。コンテナ ネットワーク モデル (CNM) は、いくつかの異なるネットワーク ドライバーを使用する Docker ネットワークを制御します。ネットワークの選択基準は、コンテナの機能と目的に基づきます。

これらは、他のプラットフォームのワークロードを Docker サービスやコンテナーに接続できるため、非常に強力です。 Windows と Linux のどちらを実行している場合でも、Docker を使用してプラットフォームに依存しない方法で Docker ホストを管理できます。

Docker ネットワーキングはどのように機能しますか?

Docker は、コンテナ ネットワーク モデル (CNM) として知られる基本的なネットワーク モデルを指定しており、コンテナ ネットワークを実装するソフトウェアが満たさなければならない仕様を備えています。 CNM は、ネットワーク構成をコンソール スタイルの分散キー/値ストアに保持します。

Docker-ネットワーク-コンテナ
Docker-ネットワーク-コンテナ

CNM の 3 つのコンポーネントは、サンドボックス、エンドポイント、およびネットワークです。

  1. サンドボックス: サンドボックスには、コンテナーのネットワーク構成が格納されます。コンテナ内では、ネットワーク スタックとして機能します。
  2. エンドポイント: エンドポイントは、通常はペアで提供されるネットワークのインターフェイスです。一方の端を選択したネットワークに配置し、もう一方の端をサンドボックスに配置してペアを構成します。また、エンドポイントは 1 つのネットワークにのみ参加し、1 つのネットワーク サンドボックスには複数のエンドポイントが含まれる場合があります。
  3. ネットワーク: 直接通信機能を持つエンドポイントの集合で構成されます。

サンドボックスでは、複数のエンドポイントが存在する場合でも、各エンドポイントが持つことができるネットワーク接続は 1 つだけです。ネットワークは、相互接続されたいくつかのエンドポイントのグループです。

Docker ネットワーキングのネットワーク ドライバーは、CNM のアイデアを実行に移します。 Docker が使用するネットワーク ドライバーには、ネイティブ ネットワーク ドライバーとリモート ネットワーク ドライバーの 2 種類があります。ネイティブ ネットワーク ドライバー (一般に組み込みドライバーと呼ばれます) は、Docker によって提供され、Docker エンジンに同梱されています。一方、ベンダーによるサードパーティ ドライバーはリモート ネットワーク ドライバーとして知られています。

特定の機能を組み込んだドライバーを設計することが可能です。

Docker ネットワーキング 101
Docker ネットワーキング 101

ドッカーネットワーク

docker には主に 5 つのネットワーク (ブリッジ、ホスト、オーバーレイ、なし、macvlan) があります。

ブリッジ ネットワークは、docker のデフォルトのネットワークです。これらのネットワークの概要は、Docker アーキテクチャに関する以前の記事で説明しました。

この記事では、Docker ネットワーキングの実践的な部分を紹介します。 Docker ネットワークの詳細を確認する方法、ネットワークに接続する方法、ネットワークを作成する方法などについて説明します。それでは、始めましょう。

Docker コンテナを実行すると、他のネットワークが指定されていない限り、デフォルトのブリッジ ネットワーク呼び出し docker0 がコンテナに関連付けられます。たとえば、 ifconfig コマンドを実行すると、ブリッジ タイプの docker0 ネットワークの詳細が他のネットワークの詳細とともに取得されます。

 osboxes@worker2:~$ ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

ether 02:42:f6:59:4a:5f  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255

inet6 fe80::763e:c0b4:14df:b273  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:68:64:9a  txqueuelen 1000  (Ethernet)

RX packets 2157  bytes 2132896 (2.1 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 952  bytes 151610 (151.6 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.56.102  netmask 255.255.255.0  broadcast 192.168.56.255

inet6 fe80::20a:6c57:839d:2652  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:53:45:82  txqueuelen 1000  (Ethernet)

RX packets 10597  bytes 1497146 (1.4 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 12058  bytes 1730219 (1.7 MB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 1000  (Local Loopback)

RX packets 1196  bytes 105396 (105.3 KB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1196  bytes 105396 (105.3 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Docker ネットワーキング 101
Docker ネットワーキング 101

リストネットワーク

ls コマンドを実行して、現在のホストで実行されているすべてのネットワークを確認します。ご覧のとおり、ブリッジ、ホストを含​​む 7 つのネットワークが現在存在しており、Docker のインストール時に自動的に作成されるものはありません。過去に実行したコンテナによっては、他のカスタム ネットワークの詳細も含まれています。

 @:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local
Docker ネットワーキング 101
Docker ネットワーキング 101

ネットワークの検査

inspect コマンドを実行すると、ネットワーク タイプに関するすべての詳細を取得できます。名前、ID、作成時刻、スコープ、ドライバー、サブネットやゲートウェイ アドレスなどの構成の詳細を含むネットワークに関する情報が提供されます。コンテナが稼働している場合は、コンテナの詳細も提供します。それ以外の場合は、空の文字列が返されます。

 @:~$ docker network inspect bridge

[

{

"Name": "bridge",

"Id": "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",

"Created": "2019-08-01T10:30:27.595054009-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": null,

"Config": [

{

"Subnet": "172.17.0.0/16",

"Gateway": "172.17.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

},

"Labels": {}

}

]

ネットワークの作成

create コマンドを使用すると、独自のネットワークを作成できます。 --driver フラグを使用してドライバーのタイプを指定する必要があります。以下の例ではブリッジ タイプを使用しています。

 @:~$ docker network create --driver bridge _network

08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409

ls コマンドを実行して、ネットワークが作成されたかどうかを確認します。

 @:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de        _network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

次に、作成したネットワーク上で Docker コンテナを実行します。以下のコマンドで単純なApacheサーバーコンテナを実行しています。

 @:~$ docker run -it -d --network=_network httpd

38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002

Inspection コマンドを実行して _network のすべての情報を確認します。今回は、出力を検査することでコンテナーの詳細を確認できます。コンテナ名は completed_dubinsky です。

 @:~$ docker network inspect _network

[

{

"Name": "_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {

"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {

"Name": "determined_dubinsky",

"EndpointID": "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",

"MacAddress": "02:42:ac:15:00:02",

"IPv4Address": "172.21.0.2/16",

"IPv6Address": ""

}

},

"Options": {},

"Labels": {}

}

]

ネットワークの切断

コンテナからネットワーク disconnect には、以下のコマンドを実行します。切断コマンドでネットワーク名とコンテナ名を指定する必要があります。

 @:~$ docker network disconnect _network determined_dubinsky

このネットワークでは、determined_dubinsky コンテナが実行されなくなります。オブジェクトフィールドは空になります。

 @:~$ docker network inspect _network

[

{

"Name": "_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {},

"Labels": {}

}

]

ブリッジ以外のネットワークを作成する場合は、ブリッジ以外のドライバー名を記載する必要があります。 overlay ネットワークを作成するには、以下のコマンドを実行します。

 @manager1:~$ docker network create --driver overlay  _network_2

ynd2858eu1cngwhpc40m3h1nx

@manager1:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de        _network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

ynd2858eu1cn        _network_2   overlay             swarm

host ネットワークを作成するには、-driver フラグを付けてホストを指定します。以下の例では、以前にすでに実行されていたホスト ネットワーク インスタンスが 1 つだけ許可されているため、エラーが返されます。したがって、このコマンドは別のホスト ネットワークを作成しません。

 @manager1:~$ docker network create --driver host  _network_3

Error response from daemon: only one instance of "host" network is allowed

結論

以上、Docker ネットワークと、Docker ネットワークの接続、切断、作成、検査の方法について説明しました。 Docket ネットワーキングに慣れるために、次のコマンドを試してください。 Net Devops の学習に興味がある場合は、この Udemy コース をチェックしてください。

共著: スロビー。

「 Docker ネットワーキング 101」についてわかりやすく解説!絶対に観るべきベスト2動画

Dockerで始めるネットワーク実験入門 2020-5-30 C-4
【2021年最新】Docker環境構築入門|14分でdocker-composeまで完全解説!【windows/mac対応】Dockerの使い方

Docker は、開発者がアプリケーションを構築して実行できる優れたツールです。

興味深い事実: サービスとしてのプラットフォーム (PaaS) 企業である DotCloud が、実際にこれを内部ツールとして作成しました。

しかし、同社はすぐにその真の可能性に気づき、2013 年にオープンソース プロジェクトとして利用できるようにしました。現在、Docker Inc として知られているものは、 Docker Inc です。すぐに人気が高まり、ユーザー数は数万となり、Red Hat、IBM、Microsoft、Google、Cisco Systems などの企業と大規模なパートナーシップを結んでいます。

今日のソフトウェア開発では、機敏性と迅速な変更への対応が求められます。私たちはストーリーポイントで自分たちの仕事を評価し、スタンドアップに参加し、スクラムなどの方法論を使用します。 Docker は私たちの俊敏性をサポートしてくれます。

ソフトウェア開発の展開フェーズには多額の費用がかかることを認識する必要があります。ここで Docker プラットフォームが登場します。Docker プラットフォームは、OS レベルの仮想ソフトウェアを使用してソフトウェアをコンテナーに配置することで、デプロイメントを簡素化します。

ドッカーハブ
ドッカーハブ

このプラットフォームの優れた点は、アプリケーションとそのすべての依存関係 (バイナリ、ライブラリ、構成ファイル、スクリプト、jar など) が 1 つの使いやすいパッケージにバンドルされていることです。これはシンプルで標準化されたアプローチであり、どこのソフトウェア開発者にとっても作業が楽になります。

Docker によりプラットフォーム間のコラボレーションとネットワーキングが簡素化される

Docker が登場する前は、開発パイプラインでのソフトウェアの移動を管理するには、仮想マシン、構成管理ツール、パッケージ管理システム、ライブラリ依存関係の複雑な網目などのテクノロジーの組み合わせが必要になるのが一般的でした。これらのツールを保守および管理するには、熟練したエンジニアが必要でした。最も必要なカスタマイズ設定。

Docker は、このプロセスに参加するすべてのエンジニアが単一言語でコミュニケーションできるようにすることでこれを変更し、コラボレーションを簡素化しました。

Docker コンテナは、ホスト マシンを通じて、Docker ネットワークを使用して相互に通信したり、外部の世界と通信したりします。コンテナ ネットワーク モデル (CNM) は、いくつかの異なるネットワーク ドライバーを使用する Docker ネットワークを制御します。ネットワークの選択基準は、コンテナの機能と目的に基づきます。

これらは、他のプラットフォームのワークロードを Docker サービスやコンテナーに接続できるため、非常に強力です。 Windows と Linux のどちらを実行している場合でも、Docker を使用してプラットフォームに依存しない方法で Docker ホストを管理できます。

Docker ネットワーキングはどのように機能しますか?

Docker は、コンテナ ネットワーク モデル (CNM) として知られる基本的なネットワーク モデルを指定しており、コンテナ ネットワークを実装するソフトウェアが満たさなければならない仕様を備えています。 CNM は、ネットワーク構成をコンソール スタイルの分散キー/値ストアに保持します。

Docker-ネットワーク-コンテナ
Docker-ネットワーク-コンテナ

CNM の 3 つのコンポーネントは、サンドボックス、エンドポイント、およびネットワークです。

  1. サンドボックス: サンドボックスには、コンテナーのネットワーク構成が格納されます。コンテナ内では、ネットワーク スタックとして機能します。
  2. エンドポイント: エンドポイントは、通常はペアで提供されるネットワークのインターフェイスです。一方の端を選択したネットワークに配置し、もう一方の端をサンドボックスに配置してペアを構成します。また、エンドポイントは 1 つのネットワークにのみ参加し、1 つのネットワーク サンドボックスには複数のエンドポイントが含まれる場合があります。
  3. ネットワーク: 直接通信機能を持つエンドポイントの集合で構成されます。

サンドボックスでは、複数のエンドポイントが存在する場合でも、各エンドポイントが持つことができるネットワーク接続は 1 つだけです。ネットワークは、相互接続されたいくつかのエンドポイントのグループです。

Docker ネットワーキングのネットワーク ドライバーは、CNM のアイデアを実行に移します。 Docker が使用するネットワーク ドライバーには、ネイティブ ネットワーク ドライバーとリモート ネットワーク ドライバーの 2 種類があります。ネイティブ ネットワーク ドライバー (一般に組み込みドライバーと呼ばれます) は、Docker によって提供され、Docker エンジンに同梱されています。一方、ベンダーによるサードパーティ ドライバーはリモート ネットワーク ドライバーとして知られています。

特定の機能を組み込んだドライバーを設計することが可能です。

Docker ネットワーキング 101
Docker ネットワーキング 101

ドッカーネットワーク

docker には主に 5 つのネットワーク (ブリッジ、ホスト、オーバーレイ、なし、macvlan) があります。

ブリッジ ネットワークは、docker のデフォルトのネットワークです。これらのネットワークの概要は、Docker アーキテクチャに関する以前の記事で説明しました。

この記事では、Docker ネットワーキングの実践的な部分を紹介します。 Docker ネットワークの詳細を確認する方法、ネットワークに接続する方法、ネットワークを作成する方法などについて説明します。それでは、始めましょう。

Docker コンテナを実行すると、他のネットワークが指定されていない限り、デフォルトのブリッジ ネットワーク呼び出し docker0 がコンテナに関連付けられます。たとえば、 ifconfig コマンドを実行すると、ブリッジ タイプの docker0 ネットワークの詳細が他のネットワークの詳細とともに取得されます。

 osboxes@worker2:~$ ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

ether 02:42:f6:59:4a:5f  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255

inet6 fe80::763e:c0b4:14df:b273  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:68:64:9a  txqueuelen 1000  (Ethernet)

RX packets 2157  bytes 2132896 (2.1 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 952  bytes 151610 (151.6 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.56.102  netmask 255.255.255.0  broadcast 192.168.56.255

inet6 fe80::20a:6c57:839d:2652  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:53:45:82  txqueuelen 1000  (Ethernet)

RX packets 10597  bytes 1497146 (1.4 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 12058  bytes 1730219 (1.7 MB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 1000  (Local Loopback)

RX packets 1196  bytes 105396 (105.3 KB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1196  bytes 105396 (105.3 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Docker ネットワーキング 101
Docker ネットワーキング 101

リストネットワーク

ls コマンドを実行して、現在のホストで実行されているすべてのネットワークを確認します。ご覧のとおり、ブリッジ、ホストを含​​む 7 つのネットワークが現在存在しており、Docker のインストール時に自動的に作成されるものはありません。過去に実行したコンテナによっては、他のカスタム ネットワークの詳細も含まれています。

 @:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local
Docker ネットワーキング 101
Docker ネットワーキング 101

ネットワークの検査

inspect コマンドを実行すると、ネットワーク タイプに関するすべての詳細を取得できます。名前、ID、作成時刻、スコープ、ドライバー、サブネットやゲートウェイ アドレスなどの構成の詳細を含むネットワークに関する情報が提供されます。コンテナが稼働している場合は、コンテナの詳細も提供します。それ以外の場合は、空の文字列が返されます。

 @:~$ docker network inspect bridge

[

{

"Name": "bridge",

"Id": "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",

"Created": "2019-08-01T10:30:27.595054009-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": null,

"Config": [

{

"Subnet": "172.17.0.0/16",

"Gateway": "172.17.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

},

"Labels": {}

}

]

ネットワークの作成

create コマンドを使用すると、独自のネットワークを作成できます。 --driver フラグを使用してドライバーのタイプを指定する必要があります。以下の例ではブリッジ タイプを使用しています。

 @:~$ docker network create --driver bridge _network

08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409

ls コマンドを実行して、ネットワークが作成されたかどうかを確認します。

 @:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de        _network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

次に、作成したネットワーク上で Docker コンテナを実行します。以下のコマンドで単純なApacheサーバーコンテナを実行しています。

 @:~$ docker run -it -d --network=_network httpd

38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002

Inspection コマンドを実行して _network のすべての情報を確認します。今回は、出力を検査することでコンテナーの詳細を確認できます。コンテナ名は completed_dubinsky です。

 @:~$ docker network inspect _network

[

{

"Name": "_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {

"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {

"Name": "determined_dubinsky",

"EndpointID": "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",

"MacAddress": "02:42:ac:15:00:02",

"IPv4Address": "172.21.0.2/16",

"IPv6Address": ""

}

},

"Options": {},

"Labels": {}

}

]

ネットワークの切断

コンテナからネットワーク disconnect には、以下のコマンドを実行します。切断コマンドでネットワーク名とコンテナ名を指定する必要があります。

 @:~$ docker network disconnect _network determined_dubinsky

このネットワークでは、determined_dubinsky コンテナが実行されなくなります。オブジェクトフィールドは空になります。

 @:~$ docker network inspect _network

[

{

"Name": "_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {},

"Labels": {}

}

]

ブリッジ以外のネットワークを作成する場合は、ブリッジ以外のドライバー名を記載する必要があります。 overlay ネットワークを作成するには、以下のコマンドを実行します。

 @manager1:~$ docker network create --driver overlay  _network_2

ynd2858eu1cngwhpc40m3h1nx

@manager1:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de        _network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

ynd2858eu1cn        _network_2   overlay             swarm

host ネットワークを作成するには、-driver フラグを付けてホストを指定します。以下の例では、以前にすでに実行されていたホスト ネットワーク インスタンスが 1 つだけ許可されているため、エラーが返されます。したがって、このコマンドは別のホスト ネットワークを作成しません。

 @manager1:~$ docker network create --driver host  _network_3

Error response from daemon: only one instance of "host" network is allowed

結論

以上、Docker ネットワークと、Docker ネットワークの接続、切断、作成、検査の方法について説明しました。 Docket ネットワーキングに慣れるために、次のコマンドを試してください。 Net Devops の学習に興味がある場合は、この Udemy コース をチェックしてください。

共著: スロビー。

「 Docker ネットワーキング 101」についてわかりやすく解説!絶対に観るべきベスト2動画

Dockerで始めるネットワーク実験入門 2020-5-30 C-4
【2021年最新】Docker環境構築入門|14分でdocker-composeまで完全解説!【windows/mac対応】Dockerの使い方