docker 容器網絡篇
可以使用如下命令查看docker橋設備:
[root@localhost ~]# docker network inspect bridge [ { "Name": "bridge", "Id": "f9e359b81925bf63644a0b63d8696223e097116c5354c990301a4d60fde60bd6", "Created": "2019-03-12T21:45:21.5×××6831-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": { "a918789047a01d41741e6ef64ee8b684596837863ec110422d261b144060b919": { "Name": "box1", "EndpointID": "80c1a507bc70e5a7b16ba912b0e3777bb11368c5adfa6d489f67af790ce9cf5d", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "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 有以下幾種網絡類型
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE f9e359b81925 bridge bridge local #橋接,nat橋 646ca4df0271 host host local #共享主機網絡 696375b0f574 none null local #無網絡
一、橋接(bridge)
當啟動一個docker容器的時候,如果沒有指定網絡類型,默認使用橋接網絡,並且啟動Docker容器的時候,系統會自動創建一對網卡,一個在宿主機上,一個在docker容器內,它們的插在了docker0這個交換機上。
如下圖所示(宿主機網卡為:veth071e7f3@if18。docker網卡為:eth0@if19)(命令:docker run --name box1 -it --rm busybox 等同於 docker run --name box1--network bridge
-it --rm busybox):
二、共享主機(host)
1、共享宿主機
啟動容器的網絡共享宿主機,命令為:docker run --name box1 --network host -it --rm busybox
2.共享容器(首先創建一個bridge容器box1,然後創建第二個容器box2共享box1的網絡,如果容器box1停止,則box2變成無網絡容器),命令如下:
docker run --name box1 -it --rm busybox
docker run --name box2 --network container:box1 -it --rm busybox
三、無網絡
啟動的容器只有本地回環地址
docker run --name box1 --network none -it --rm busybox
擴展:
一、
docker snat解讀
所有源地址為172.16.0.0/16,目標地址為任意的docker容器,只要出口流量不經過docker0交換機,都做地址偽裝(源地址轉換)
二、
在創建docker容器的時候,容器啟動後默認會使用宿主機的DNS配置,如果要手動配置,使用命令(同理,hostname和hosts配置也以同樣的方式實現):
docker run --name box1 --dns 8.8.8.8 -it --rm busybox
三、指定docker使用的網段
在/etc/docker/daemon.json文件中寫入如下信息:
{
"bip":"192.168.0.1/24",
"dns":"8.8.8.8" # 可加可不加,看需要
}
四、docker客戶端連接遠程docker服務器
在/etc/systemd/system/docker.service.d/tcp.conf文件中寫入如下信息:
[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
然後重啟docker:
systemctl daemon-reload
systemctl restart docker
連接方式為:docker -H 127.0.0.1:2375 [command]
五、創建橋接設備
命令幫助:docker network create --help
[root@localhost ~]# docker network create -d bridge --subnet "172.26.0.1/16" --gateway "172.26.0.1" mybr0
7436da582785e566e77658e745c378b16d497ac1eb45fa7b4a86f1e2fc805499
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3314661353a5 bridge bridge local
646ca4df0271 host host local
7436da582785 mybr0 bridge local
696375b0f574 none null local
總結:
docker(單機)容器共有四種網絡模型:
1.none 無網絡
2.bridge 橋接(默認模式)
3.共享主機,第三種為共享容器A,第四種為共享宿主機。
docker 容器網絡篇