*Docker Network(Windows2016) [#fa8f90c7]

RIGHT:更新日 &lastmod();

サーバの物理構成としてネットワークは
NICを2枚使用して一枚はDocker用のNIC、もう一枚はDockerサーバ用のNICにした。

Dockerには

+NATのネットワーク(デフォルトのネットワーク)
--各コンテナーは、内部のプライベート IP プレフィックス (例: 172.16.0.0/12) から IP アドレスを取得する。 コンテナー ホストからコンテナー エンドポイントへのポート転送およびマッピングがサポートされる。
+透過のネットワーク
--各コンテナーのエンドポイントは、物理ネットワークに直接接続される。
+L2 ブリッジ ネットワーク
--各コンテナーのエンドポイントは、コンテナー ホストと同じ IP サブネット内にある。 IP アドレスは、コンテナー ホストと同じプレフィックスから静的に割り当てる必要がある。 ホスト上のすべてのコンテナーのエンドポイントは、レイヤー 2 のアドレス変換のために同じ MAC アドレスとなる。

がある

***手順 [#xa26ff07]

+Dockerで自由にNetworkを構成するには起動しているDockerを停止する。
--「Stop-Service docker」
+Dockerサーバの「C:\ProgramData\docker\config」にdaemon.jsonというファイルを以下のように変更または作成する
 {
     "bridge" : "none"
 }
+デフォルトで動いているNAT構成(172.30.176.0/20のネットワーク)のDockerNetWorkの削除をする
--「Get-ContainerNetwork | Remove-ContainerNetwork」
+Dockerを起動する
--「Start-Server docker」


***以下が実際のコマンドの様子 [#d970198f]

-Dockerサービス停止
 PS C:\Windows\system32> Stop-Service docker

-コンテナネットワークの表示
 PS C:\Windows\system32> Get-ContainerNetwork
 
 Name Id                                   Subnets           Mode SourceMac DNSServers DNSSuffix
 ---- --                                   -------           ---- --------- ---------- ---------
 nat  8b9a409f-20a7-41b5-b22d-b05ccef1b1ec {172.30.176.0/20} NAT


-DockerNetWorkの削除
 PS C:\Windows\system32> Get-ContainerNetwork | Remove-ContainerNetwork
 確認
 Remove-ContainerNetwork は、コンテナーのネットワーク "" を削除します。
 [Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):


-削除確認
 PS C:\Windows\system32> Get-ContainerNetwork
 PS C:\Windows\system32>


-Dockerサービス停止起動
 PS C:\Windows\system32> Start-Service docker


***Natのネットワーク構成 [#ze97b813]

従来のデフォルトネットワーク172.30.176.0/20を変更する

 PS C:\Windows\system32> docker network create -d nat --subnet=192.168.101.0/24 --gateway=192.168.101.1 IsmNatNetwork


***透過のネットワーク構成 [#idef7249]

物理ネットワークに直接接続する

docker network createで使用するパラメータcom.docker.network.windowsshim.interfaceの値は次のコマンドのNameを指定する

 PS C:\Windows\system32> Get-NetAdapter
 
 Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
 ----                      --------------------                    ------- ------       ----------             ---------
 イーサネット 2            Intel(R) PRO/1000 PT Dual Port Ser...#2       7 Disconnected 00-15-17-97-2A-0F          0 bps
 イーサネット              Intel(R) PRO/1000 PT Dual Port Serve...      15 Up           00-15-17-97-2A-0E         1 Gbps
 Npcap Loopback Adapter    Npcap Loopback Adapter                       19 Up           02-00-4C-4F-4F-50       1.2 Gbps
 イーサネット 3            Realtek PCIe GBE Family Controller           18 Up           00-26-18-7D-F7-EE         1 Gbps

 PS C:\Windows\system32> docker network create -d transparent -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNet1
 b1280e540af55856bf1a9470ffcea16da511e0c1329be5efdeb8778f738be879

-nanoserverで確認
 PS C:\Windows\system32> docker run -it --network=IsmNet1 --ip 192.168.10.111 --name ismsv ism/nanoserver:last cmd


***L2 ブリッジ ネットワーク構成 [#paa76171]

 PS C:\Windows\system32> docker network create -d l2bridge -o com.docker.network.windowsshim.interface="イーサネット" --subnet=192.168.10.0/24 --gateway=192.168.10.245 IsmNetB
 526aff3d1f36de7619a9a1adc1a5c87ed9b2d3250c60c73fd1d465bf40986b20

-nanoserverで確認(DNSも指定)
 PS C:\Windows\system32> docker run -it --network=IsmNetB --ip 192.168.10.111 --dns 192.168.10.46 --isolation hyperv --name ismsv ism/nanoserver:last cmd

&color(red){注意)--isolation=hypervでHyper-Vコンテナを使用するとき「L2 ブリッジ」では--ip 192.168.10.111のようにIPを固定できるが、「透過のネットワーク」では無視され外部DHCPよりIPが割り振られる。(仕様?)};


&color(red){問題:};DockerコンテナからDockerサーバにPingが通らない。DockerサーバからDockerコンテナにはPingが通る。~
外部PCからDockerサーバにPingが通らない。Dockerサーバから外部PCにはPingが通る。~
外部PCからDockerサーバにはリモートデスクトップ接続ができる。~
(なんで???)~
Dockerサーバ:Dockerが動作しているWindows2016のこと

-docker network createコマンドで作成したネットワークの表示
 PS C:\Windows\system32> docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE
 526aff3d1f36        BridgeNet1          l2bridge            local
 828be0f3273c        none                null                local 


-docker network createコマンドで作成したネットワークの削除
 PS C:\Windows\system32> docker network rm BridgeNet1
 BridgeNet1


-IISを起動
 PS C:\Windows\system32> docker run -it -d --isolation=hyperv --name ism-iis --network IsmNetB --ip 192.168.10.111 ism/iis cmd
 a63b5f11ea008579c8fc4fcf37bc6e4ae08d1dbb5d45d23c143bff221598c756

-MSSQLを起動
 PS C:\Windows\system32> docker run -d --name ismsql --network=IsmNetB --isolation=hyperv -h ismsql  --ip 192.168.10.114 \
 -e sa_password=******* -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express


***DockrHostからコンテナのIPを表示 [#v45462bb]

-ネットワーク名の確認

 PS C:\Windows\system32> docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE
 6b2aa30dcbbb        IsmNetB             l2bridge            local
 f3d699f90b9c        none                null                local

-IP確認

 PS C:\Windows\system32> docker network inspect IsmNetB
 [
     {
         "Name": "IsmNetB",
         "Id": "6b2aa30dcbbb20e8a0a72f2769bded0730652a6ec8250a1ec1291cd92f399ba0",
         "Created": "2017-04-03T18:09:26.3499841+09:00",
         "Scope": "local",
         "Driver": "l2bridge",
         "EnableIPv6": false,
         "IPAM": {
             "Driver": "windows",
             "Options": null,
             "Config": [
                 {
                     "Subnet": "192.168.10.0/24",   ←NetWork
                     "Gateway": "192.168.10.245"  ←G/W
                 }
             ]
         },
         "Internal": false,
         "Attachable": false,
         "Containers": {
             "9fc4e41be555e517da50ae33de38791c5374cff7cffccd7ab13b2e14fe77f053": {
                 "Name": "ismsv1",    ←コンテナ名
                 "EndpointID": "732fecad38b484e45ada63707c3e1a6fcf58986222dd35fc8c7ac97da4b96988",
                 "MacAddress": "00:15:5d:c3:ce:45",
                 "IPv4Address": "192.168.10.111/24",   ←コンテナ名のIP
                 "IPv6Address": ""
             }
         },
         "Options": {
             "com.docker.network.windowsshim.hnsid": "edac228c-1f85-4215-a7ee-82ff20606715",
             "com.docker.network.windowsshim.networkname": "IsmNetB"
         },
         "Labels": {}
     }
 ]

**参考 [#y30d4519]

-https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-containers/container-networking
-https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/configure-docker-daemon

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS