SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Docker】入門④ コマンドを用いたDockerネットワークの基本操作

今回はネットワーク周りのコマンド。

ネットワーク関連コマンド

ネットワーク一覧の表示

Dockerコンテナでは互いに通信を行う際にDockerネットワークを介して行います。

Dockerネットワークの一覧を表示するには、「network ls」コマンドを用います。

docker network ls

・出力結果

NETWORK ID NAME DRIVER SCOPE
0360b9d76e47 bridge bridge local
7ff815c019dc host host local
d69ee7c6df87 none null local

まだこれを見ただけじゃいまいち分かりませんね。

現状ではあまり有効活用する方法が思いつきませんが、主要なオプションだけ確認しておきます。

・フィルター

docker network ls -f driver=host

・出力結果

NETWORK ID NAME DRIVER SCOPE
7ff815c019dc host host local

フィルター(-f)の後に条件を入力することで表示を絞ることができます。

・ネットワークIDのみ表示する

docker network ls -q

・出力結果

0360b9d76e47
7ff815c019dc
d69ee7c6df87

・詳細出力

docker network ls --no-trunc

・出力結果

NETWORK ID              NAME DRIVER SCOPE
0360b9d76e474a8e53b03219530cea58587f410826e959821009ce48537b53a4 bridge bridge local
7ff815c019dc264c72976bb3c2be209a78d16514953453da4c5eb2b302257ecc host host local
d69ee7c6df875b9c9b3d745ce4de7dabfedb0dcb6fa3c337c8985982e2caec21 none null local

コンテナのネットワーク確認

起動したコンテナの所属するネットワーク情報は「inspect」コマンドによる取得できます。
コンテナに対するコマンドになるので「docker container」コマンドでコンテナ名(test)を指定します。

docker container inspect test

・出力結果

[
{
"Id": "498807a61817f09a064e6fd8ae97c3c30dd6e0cd5498e44d9f411f0ce7a7ce3e",
"Created": "2020-02-06T15:25:02.916454418Z",
"Path": "nginx",
"Args": [
"-g",
"daemon off;"
],


今は詳細については省略します。

ネットワークの作成

ネットワークの作成にはcreateコマンドを用います。

docker network create test-net

作成したネットワークはlsコマンドで確認できまs。

docker network ls -f NAME=test-net

・出力結果

NETWORK ID NAME DRIVER SCOPE
d66ede16d5d1 test-net bridge local

ドライバーはデフォルトでbridgeが割り当てられますがオプションによりオーバーレイネットワークを指定することもできます。

--driver=overlay
ネットワークへの接続

接続というのは、Dockerコンテナをネットワークに接続するという意味です。

作成済みのコンテナを作成したネットワークに所属させます。

docker network connect test-net test


また、ネットワークからの切断は「disconnect」コマンドを使用します。

docker network disconnect test-net test
ネットワーク詳細の確認

先ほどはコンテナの所属ネットワーク情報を表示しましたが、同様のネットワーク自体の詳細情報も表示することができます。

docker network inspect test-net

・出力結果

[
{
"Name": "test-net",
"Id": "d66ede16d5d1f1ffdad47daf2b49bd928314fbdc45aff3b326e294478f8dfaef",
"Created": "2020-02-10T16:51:44.575849312Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"498807a61817f09a064e6fd8ae97c3c30dd6e0cd5498e44d9f411f0ce7a7ce3e": {
"Name": "test",
"EndpointID": "4668c70ae55edec483e1dd7fa2a8700c9561e265068d3691df831b43fb407df9",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]

test」コンテナがネットワークにしっかりと含まれていることが確認できます。

ネットワークの削除

なんとなく予想はつきますが、rmコマンドを使います。

docker network rm test-net

そのまま実行すると以下のエラーメッセージが表示されました。

Error response from daemon: error while removing network: network test-net id d66ede16d5d1f1ffdad47daf2b49bd928314fbdc45aff3b326e294478f8dfaef has active endpoints

エンドポイントを持っているということで、ネットワーク上にコンテナが存在するとエラーになるようです。
disconnectでコンテナをネットワークから外して再度実行するとうまく削除できました。


今回の範囲だけではあまりおもしろいところはありませんが今回はここまで。