在安装Docker的时候,系统会自动建立一个docker0的设备,默认ip地址为172.17.0.1,他既做为宿主机的网卡使用,也做为docker容器的交换机来使用。Docker的默认网段为:172.16.0.0/16。
可使用以下命令查看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 有如下几种网络类型json
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE f9e359b81925 bridge bridge local #桥接,nat桥 646ca4df0271 host host local #共享主机网络 696375b0f574 none null local #无网络
1、桥接(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):
2、共享主机(host)
一、共享宿主机
启动容器的网络共享宿主机,命令为:docker run --name box1 --network host -it --rm busybox
能够看到容器的ip与宿主机同样
2.共享容器(首先建立一个bridge容器box1,而后建立第二个容器box2共享box1的网络,若是容器box1中止,则box2变成无网络容器),命令以下:
docker run --name box1 -it --rm busybox
docker run --name box2 --network container:box1 -it --rm busybox
3、无网络
启动的容器只有本地回环地址服务器
docker run --name box1 --network none -it --rm busybox
扩展:
1、
docker snat解读
全部源地址为172.16.0.0/16,目标地址为任意的docker容器,只要出口流量不通过docker0交换机,都作地址假装(源地址转换)
2、
在建立docker容器的时候,容器启动后默认会使用宿主机的DNS配置,若是要手动配置,使用命令(同理,hostname和hosts配置也以一样的方式实现):
docker run --name box1 --dns 8.8.8.8 -it --rm busybox网络
3、指定docker使用的网段
在/etc/docker/daemon.json文件中写入以下信息:
{
"bip":"192.168.0.1/24",
"dns":"8.8.8.8" # 可加可不加,看须要
}
4、docker客户端链接远程docker服务器
在/etc/systemd/system/docker.service.d/tcp.conf文件中写入以下信息:tcp
[Service] ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
而后重启docker:ide
systemctl daemon-reload systemctl restart docker
链接方式为:docker -H 127.0.0.1:2375 [command]
5、建立桥接设备
命令帮助:docker network create --help.net
[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,第四种为共享宿主机。3d