网络
docker network ls
:可以查看docker有哪些网络。
[root@VM_centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
78c42baf28ef bridge bridge local
1db606f36f61 host host local
717d0aafe538 none null local
--network=
运行容器的时候用network参数可以指定运行哪一种网络。
[root@VM_centos ~]# docker run -it --network=none busybox
none网络
不挂任何网卡,只有一个回环网络,也就是说只有docker容器自己才可以访问,其它docker或者外网都不可以访问。适用于无外网需求且安全性比较高的网络。
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
host
和宿主机共用一个网络地址,网络配置和宿主机一模一样。
bridge
宿主机安装Docker服务时会创建一个 命名为 docker0 的网桥。如果不指定–network,创建的容器默认都会挂到 docker0 上,也就是说在同一个网段。
[root@VM_centos ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:81:eb:c2:75 txqueuelen 0 (Ethernet)
RX packets 44695 bytes 3016158 (2.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 52558 bytes 133682121 (127.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
自定义网络
docker network create --driver bridge mybridge
-- 如果便创建一个网桥名为mybridge的网络
[root@VM_90_159_centos ~]# ifconfig
br-5636da1dfd13: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:45:71:e5:b5 txqueuelen 0 (Ethernet)
RX packets 2316 bytes 173571 (169.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2711 bytes 13314288 (12.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:81:eb:c2:75 txqueuelen 0 (Ethernet)
RX packets 47016 bytes 3157613 (3.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55274 bytes 146996787 (140.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-- 查询网络会发现多了一个br-5636da1dfd13的网桥。
docker run -it --network mybridge centos
-- 运行docker容器,并把网络设为mybridge 。
docker之间网络互通?
同一个网络中的不同docker容器就能互通;不同网络中的不同docker容器不能互通。
比如一个172.18.0.1网段的docker容器,一个 172.17.0.1 网段的docker容器是不能互通的,如果想互通,需要把另外一台docker容器添加到相同的网络中,比如:
docker network connect mybridge fbff14cb396f
docker和外界联系
NAT,网络地址转换。docker把包发出去给外界,网桥会把包中的源地址替换成host地址。
外界与docker联系
端口映射。外界把包发给docker,目标地址用的是host的地址,host再根据端口号,根据端口映射找到对应的docker程序,然后发出去。