*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