09、Docker 容器的网络模式
docker run 创建 docker 容器时,可以用–net 选项指定容器的网络模式,Docker 有以下 4 种网络模式:
- bridge 模式:使–net =bridge 指定,默认设置;
- host 模式:使–net =host 指定;
- none 模式:使–net =none 指定;
- container 模式:使用–net =container:NAME or ID 指定。
1、安装网桥管理工具:
1 2
| yum install bridge-utils -y brctl show 可以查看到有一个 docker0 的网桥设备,下面有很多接口,每个接口都表示一个启动的docker 容器,因为我在 docker 上启动了很多容器,所以 interfaces 较多
|
2、 docker link 设置网络别名
可以给容器起一个代号,这样可以直接以代号访问,避免了容器重启 ip 变化带来的问题 –link
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]
例: 1.启动一个 test3 容器 docker run --name test3 -itd inter-image /bin/bash
2.启动一个 test5 容器,--link 做链接,那么当我们重新启动 test3 容器时,就算 ip 变了,也没关系, 我们可以在 test5 上 ping 别名 webtest docker run --name test5 -itd --link=test3:webtest inter-image /bin/bash
3.test3 和 test5 的 ip 分别是 172.17.0.22 和 172.17.0.24
4.重启 test3 容器 docker restart test3 发现 ip 变成了 172.17.0.25
5.进入到 test5 容器 docker exec -it test5 /bin/bash
ping test3 容器的 ip 别名 webtest 可以 ping 通,尽管 test3 容器的 ip 变了也可以通
|
3、none 模式
Docker 网络 none 模式是指创建的容器没有网络地址,只有 lo 网卡
容器有自己的网络命名空间,但不做任何配置,它与宿主机、与其他容器都不连通的。
1 2 3 4 5 6 7 8 9 10 11 12
| docker run -itd --name none --net=none --privileged=true centos
docker exec -it none /bin/bash
[root@05dbf3f2daaf /]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever
|
4、container 模式
简单来说,指定一个已存在的容器,复制他的网络模式。
Docker 网络 container 模式是指,创建新容器的时候,通过–net container 参数,指定其和已经存在的某个容器共享一个 Network Namespace。
Docker网络container模式是指定其和已经存在的某个容器共享一个 Network Namespace,此时这两个容器共同使用同一网卡、主机名、IP 地址,容器间通讯可直接通过本地回环 lo 接口通讯。但这两个容器在其他的资源上,如文件系统、进程列表等还是隔离的。
1 2 3 4 5 6 7 8
| [root@master1 ~]
[root@05dbf3f2daaf /] 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever
|
5、 bridge 模式
默认选择 bridge 的情况下,容器启动后会通过 DHCP 获取一个地址,当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@master1~]
[root@a131580fb605 /] 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 64: eth0@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.13/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
|
4、host 模式
Docker 网络 host 模式是指共享宿主机的网络,相当于Vmware中的NAT模式,与宿主机在同一个网络中,但没有独立IP地址。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。可以通过 –net=host 指定使用 host 网络。
1 2
| [root@master1~]# docker run --name host -it --net=host --privileged=true centos bash
|
