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 は、ネットワーク構成をコンソール スタイルの分散キー/値ストアに保持します。

CNM の 3 つのコンポーネントは、サンドボックス、エンドポイント、およびネットワークです。
- サンドボックス: サンドボックスには、コンテナーのネットワーク構成が格納されます。コンテナ内では、ネットワーク スタックとして機能します。
- エンドポイント: エンドポイントは、通常はペアで提供されるネットワークのインターフェイスです。一方の端を選択したネットワークに配置し、もう一方の端をサンドボックスに配置してペアを構成します。また、エンドポイントは 1 つのネットワークにのみ参加し、1 つのネットワーク サンドボックスには複数のエンドポイントが含まれる場合があります。
- ネットワーク: 直接通信機能を持つエンドポイントの集合で構成されます。
サンドボックスでは、複数のエンドポイントが存在する場合でも、各エンドポイントが持つことができるネットワーク接続は 1 つだけです。ネットワークは、相互接続されたいくつかのエンドポイントのグループです。
Docker ネットワーキングのネットワーク ドライバーは、CNM のアイデアを実行に移します。 Docker が使用するネットワーク ドライバーには、ネイティブ ネットワーク ドライバーとリモート ネットワーク ドライバーの 2 種類があります。ネイティブ ネットワーク ドライバー (一般に組み込みドライバーと呼ばれます) は、Docker によって提供され、Docker エンジンに同梱されています。一方、ベンダーによるサードパーティ ドライバーはリモート ネットワーク ドライバーとして知られています。
特定の機能を組み込んだドライバーを設計することが可能です。

ドッカーネットワーク
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

リストネットワーク
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

ネットワークの検査
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 コース をチェックしてください。