セージ の メモ書き

メモこそ命の恩人だ

Docker - ネットワーク

ネットワーク

Docker コンテナ・ネットワークの理解 — Docker-docs-ja 19.03 ドキュメント

  • コンテナが使用するネットワーク。
  • ネットワークを定義し、コンテナと関連付ける。
  • ネットワークを複数定義すれば、コンテナ間の通信を分離できる。

Driver

Driver名 機能
bridge ホストと別のネットワーク
host ホストと同じネットワーク
null ネットワーク機能なし
  • ネットワークの機能。上記の3種類。
  • ネットワーク作成時は、Driver を選択する。

デフォルト・ネットワーク

ネットワーク名 Driver
bridge bridge
host host
none null
  • 上記の3種類がデフォルトで用意されている。
  • Driver に対応した名称である。
  • Driver の機能に対応するネットワークである。
  • none と null は名称が異なる。
  • コンテナ起動時、"--net ネットワーク名" で関連付ける。
    • 未指定の場合、bridge で動作する。

docker network コマンド

登録済みのネットワークを確認

docker network ls

こんな感じ。既定のネットワークがあることを確認。

NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

特定のネットワーク詳細情報を表示

docker network inspect ネットワーク名

以下、bridge を確認してみる。

[
  {
    "Name": "bridge",
    "Id": "3df5c3661215ed6f4a8fb1a0f249a6d090c6ca57c450010bbcf41b1f8b56f5dc",
    "Created": "2022-01-23T13:43:01.8494231+09:00",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
        {
          "Subnet": "172.17.0.0/16"
        }
      ]
    },
    "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": {}
  }
] 

ネットワークの作成

docker network create ネットワーク名

common ネットワークを作成できた。Driver は brigde が適用されてる。

$docker network create common

NETWORK ID     NAME      DRIVER    SCOPE
ada9a5a3fd13   bridge    bridge    local
d594786ceac6   common    bridge    local
3f6cbe61bd22   host      host      local
027eb78947ca   none      null      local


実験

  • 概要
    • 仮想ネットワークを構築できるか確認する。
    • 前述の common ネットワークを使用する。
    • pukiwiki コンテナを使用する。
      • ソーセージメモ参照。
    • コンテナから Ping を使う場合、別途パッケージのインストールが必要。
      • ソーセージメモ参照。
  • チェック項目
    • ホスト・コンテナ間の Ping をチェック
    • コンテナ・コンテナ間の Ping をチェック
    • ネットワークの設定内容もチェック(Containers の部分)
  • 以下のパターンを検証
    • パターン1
      • common ネットワーク" × "pukiwiki コンテナ
    • パターン2
      • common ネットワーク" × "pukiwiki コンテナ
      • common ネットワーク" × "pukiwiki2 コンテナ
    • パターン3
      • common ネットワーク" × "pukiwiki コンテナ
      • common ネットワーク" × "pukiwiki2 コンテナ
      • common2 ネットワーク" × "pukiwiki3 コンテナ

パターン1

common ネットワークの詳細を確認。pukiwiki が登録された。

"Containers": {
    "3984772be5b16ac4fe2e92672833f8198ca97e25695f1c7f7499d2b345d5a6de": {
        "Name": "pukiwiki",
        "EndpointID": "60d356c684d81ac056c19dc28f495a2c5cfcb9a414445ac6740377f7db7e083f",
        "MacAddress": "02:42:ac:13:00:02",
        "IPv4Address": "172.19.0.2/16",
        "IPv6Address": ""
    }
},

パターン2

  • 追加で、pukiwki2 コンテナを用意する。
  • Ping の確認
    • OK:Pukiwikiコンテナ → Pukiwiki2コンテナ
    • OK:Pukiwiki2コンテナ → Pukiwikiコンテナ
    • OK:Ubuntu・コンテナ間も前述通りOK

common ネットワークの詳細を確認。pukiwiki2 も登録された。

"Containers": {
    "3984772be5b16ac4fe2e92672833f8198ca97e25695f1c7f7499d2b345d5a6de": {
        "Name": "pukiwiki",
        "EndpointID": "60d356c684d81ac056c19dc28f495a2c5cfcb9a414445ac6740377f7db7e083f",
        "MacAddress": "02:42:ac:13:00:02",
        "IPv4Address": "172.19.0.2/16",
        "IPv6Address": ""
    },
    "e6b65a5325391708aa29eec125c33b2ce37c28946610c06397fe7845e046ee70": {
        "Name": "pukiwiki2",
        "EndpointID": "d175333e90bbc2b7e4b2443acbaf157efb58f7a29a9eb0e661f3749c7c79a459",
        "MacAddress": "02:42:ac:13:00:03",
        "IPv4Address": "172.19.0.3/16",
        "IPv6Address": "" 
    }
},

パターン3

  • 追加で以下を用意する。
    • pukiwki3 コンテナ
    • common2 ネットワーク ※ 前述とは別のネットワーク
  • Ping の確認
    • NG:Pukiwikiコンテナ → Pukiwiki3コンテナ
    • NG:Pukiwiki2コンテナ → Pukiwiki3コンテナ
    • OK:Pukiwiki3コンテナ → Ubuntu
    • OK:Ubuntu → Pukiwiki3コンテナ
    • OK:Pukiwiki2コンテナ → Pukiwikiコンテナ
    • OK:Ubuntu・コンテナ間も前述通りOK
    • OK:Pukiwiki・Pukiwiki2 コンテナ間も前述通りOK

別ネットワークにより、コンテナ間で通信できないことを確認。



以上