怎么建设公司的网站,网站群建设方案6,营销型网站概念,深圳华强北最新消息目录
一、Docker网络基础
1、端口映射
使用-P选项时Docker会随机映射一个端口至容器内部的开放端口
使用docker logs查看Nginx的日志
查看映射的随机端口范围 2、使用-p可以指定要映射到的本地端口。
Local_Port:Container_Port #xff1a; 端口映射参数中指定了宿主…目录
一、Docker网络基础
1、端口映射
使用-P选项时Docker会随机映射一个端口至容器内部的开放端口
使用docker logs查看Nginx的日志
查看映射的随机端口范围 2、使用-p可以指定要映射到的本地端口。
Local_Port:Container_Port 端口映射参数中指定了宿主机的8000映射到容器内部的80端口可以多次使用-p选项
Local_IP:Local_Port:Container_Port 映射到指定地址的指定端口
Local_IP::Container_Port 映射到指定地址但是宿主机端口是随机分配的
3、指定传输协议 二、端口暴露
三、容器互联
四、Dokcer 网络模式
1、Host模式
2、container模式
3、none模式
4、bridge模式
5、Overlay模式 网络是激活Docker体系的唯一途径如果Docker没有比较出色的容器网络那么Docker根本没有如今的竞争力起初Docker网络的解决方案并不理想但是经过最近几年的发展再加上很多云计算服务商都参与了进来大批的SDN方案如雨后春笋般的冒了出来。
要使docker用必须安装docker-ce、阿里云镜像加速器
[rootlocalhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo[rootlocalhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[rootlocalhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo[rootlocalhost ~]# ls /etc/yum.repos.d/
backup Centos-aliyun.repo CentOS-Media.repo docker-ce.repo[rootlocalhost ~]# yum -y install docker-ce
[rootlocalhost ~]# systemctl start docker
[rootlocalhost ~]# systemctl enable docker阿里云镜像加速器
[rootlocalhost ~]# cat END /etc/docker/daemon.json
{registry-mirrors:[ https://nyakyfun.mirror.aliyuncs.com ]
}
END
[rootlocalhost ~]# systemctl daemon-reload
[rootlocalhost ~]# systemctl restart docker[rootlocalhost ~]# docker version
Client: Docker Engine - CommunityVersion: 19.03.8API version: 1.40Go version: go1.12.17一、Docker网络基础
Docker目前对单节点的设备提供了将容器端口映射到宿主机和容器互联两个网络服务。
1、端口映射
在Docker中容器默认是无法与外部通信的需要在启动命令中加入对应的参数才允许容器与外界通信。 当Docker中运行一个Web服务时需要把容器内的Web服务应用程序端口映射到本地宿主机的端口。这样用户访问宿主机指定的端口的话就相当于访问容器内部的Web服务端口。
使用-P选项时Docker会随机映射一个端口至容器内部的开放端口
[rootdocker ~]# docker run -d -P --name test1 nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
使用docker port可以查看端口映射情况
[rootdocker ~]# docker port test1
80/tcp - 0.0.0.0:32769使用docker logs查看Nginx的日志
[rootdocker ~]# docker logs test1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh查看映射的随机端口范围
[rootdocker ~]# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999 2、使用-p可以指定要映射到的本地端口。
Local_Port:Container_Port 端口映射参数中指定了宿主机的8000映射到容器内部的80端口可以多次使用-p选项
[rootdocker ~]# docker run -d -p 8000:80 --name test2 nginx
ac67353b3b7cb03dc4e602f96fce3129e1c0ddd9df448e5ca57ee823e9a28270这种方式会映射到所有接口地址所有访客都可以通过宿主机所有IP的端口来访问容器。
Local_IP:Local_Port:Container_Port 映射到指定地址的指定端口
[rootdocker ~]# docker run -d -p 192.168.242.149:9000:80 --name test3 nginx
d9fc60875684382100d7f5b72e1ed162c3da5485cf986e58a95300772f290741Local_IP::Container_Port 映射到指定地址但是宿主机端口是随机分配的
[rootdocker ~]# docker run -d -p 192.168.147.136::80 --name test4 nginx
aff7c8fcfe4a9502f79a24fd6e73405e7b3478c87a24cd01da1995f23d56814c
[rootdocker ~]# docker port test4
80/tcp - 192.168.147.136:327683、指定传输协议
[rootdocker ~]# docker run -d -p 80:80/tcp --name test5 nginx
ec2744d3fdece31e9d1e8b549e5e4751ffaadefd6d9ec73598693a5475e06374
[rootdocker ~]# docker port test5
80/tcp - 0.0.0.0:80
[rootdocker ~]# docker run -d -p 81:81/udp --name test6 nginx
cee3168bf8426607c83188f883bd4f0b57e75074c4122e0fdc9e2c2df22d3d6e
[rootdocker ~]# docker port test6
81/udp - 0.0.0.0:81二、端口暴露
咱们之前讲过EXPOSE命令用于端口暴露很多人会把端口暴露和端口映射混为一谈。端口暴露才能端口映射目前有两种方式用于端口暴露--expose和EXPOSE方式这两种方式作用相同但是--expose可以接受端口范围作为参数例如--expose2000~3000。
Dockerfile的作者一般在包含EXPOSE规则时都只提示哪个端口提供哪个服务。访问时还需要运维人员通过端口映射来指定。--expose和EXPOSE只是为其他命令提供所需信息的元数据。
通过docker inspect container_name查看网络配置
[rootdocker ~]# docker inspect test1Bridge: ,SandboxID: a194c54925b8fa848b4b5ac4ce34b307b58420f26b5e497af9a65cf31401a763,HairpinMode: false,LinkLocalIPv6Address: ,LinkLocalIPv6PrefixLen: 0,Ports: {80/tcp: [{HostIp: 0.0.0.0,HostPort: 32769}]},
三、容器互联
容器互联是除了端口映射外另一种可以与容器通信的方式。端口映射的用途是宿主机网络与容器的通信而容器互联是容器之间的通信。
当前实现容器互联有两种方式一种是把两个容器放进一个用户自定义的网络中另一种是使用--link参数已经弃用即将删除的功能。 为什么要使用一个单独的网络来连接两个容器呢设想一下后端容器需要调用一个数据库环境数据库容器和后端服务容器如果使用上下文中的暴露端口或者映射端口来通信势必会把数据库的端口也暴露在外网中导致数据库容器的安全性大大降低为了解决这个问题docker允许用户建立一个独立的网络来放置相应的容器只有在该网络中的容器才能相互通信外部容器是无法进入这个特定网络中的。 一个容器可以同时加入多个网络使用不同地址可以访问不同网络中的容器。 用户自定义的网络
首先创建两个容器命名为container1和container2
[rootdocker ~]# docker run -itd --namecontainer1 busybox
1fdfabd7dda4b94c897fb2c177c83b40d42bfe8646500206a53bcb0f15c49675
[rootdocker ~]# docker run -itd --namecontainer2 busybox
7cf69cf901388b2946c43adbec1efa62cca428f485e8d9188d07c4e774e7c051
接下来创建一个独立的容器网络这里使用bridge驱动桥接模式其他可选的值还有overlay和macvlan。
[rootdocker ~]# docker network create -d bridge --subnet 172.25.0.0/16 demo_net
27728db882c0b710d6be8541698120b46dd9b7b7f2e467cc9618c4bb33b4e264
[rootdocker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d43919472f6e bridge bridge local
5b09991235f8 compose_lnmp_lnmp bridge local
27728db882c0 demo_net bridge local
4775c0103fa3 host host local
973d096cf292 none null local使用--subnet和--gateway可以指定子网和网关现在我们把container2加入到demo_net中
[rootdocker ~]# docker network connect demo_net container2
[rootdocker ~]# docker network inspect demo_net Internal: false,Attachable: false,Containers: {7cf69cf901388b2946c43adbec1efa62cca428f485e8d9188d07c4e774e7c051: {Name: container2,EndpointID: 7e183d8d78c5b5fbac7a18eff0f442a0c27f0d902811aa6fb20467ab606f8e7d,MacAddress: 02:42:ac:19:00:02,IPv4Address: 172.25.0.2/16,IPv6Address: }使用docker network inspect可以查看网络中容器的连接状态。Container2已经在demo_net网络中注意IP地址使自动分配的。
启动第三个容器
[rootdocker ~]# docker run --networkdemo_net --ip172.25.3.3 -itd --namecontainer3 busybox
8a1d1481874c0a0de0bb6fd285b20b1f0543ecccbf7d0c32b5b08e2c7c4ef37b
[rootdocker ~]# docker network inspect demo_netContainers: {7cf69cf901388b2946c43adbec1efa62cca428f485e8d9188d07c4e774e7c051: {Name: container2,EndpointID: 7e183d8d78c5b5fbac7a18eff0f442a0c27f0d902811aa6fb20467ab606f8e7d,MacAddress: 02:42:ac:19:00:02,IPv4Address: 172.25.0.2/16,IPv6Address: },8a1d1481874c0a0de0bb6fd285b20b1f0543ecccbf7d0c32b5b08e2c7c4ef37b: {Name: container3,EndpointID: f3c940312e8f9e7a646931adda6e8a791b8f9ca2264378826abf8358d6e3c88f,MacAddress: 02:42:ac:19:03:03,IPv4Address: 172.25.3.3/16,IPv6Address: 查看三个容器内部的网络 [rootdocker ~]# docker exec -it container2 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:09 inet addr:172.17.0.9 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe11:9/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:10 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:796 (796.0 B) TX bytes:656 (656.0 B)eth1 Link encap:Ethernet HWaddr 02:42:AC:19:00:02 inet addr:172.25.0.2 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe19:2/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:24 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:1968 (1.9 KiB) TX bytes:656 (656.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)[rootdocker ~]# docker exec -it container3 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:19:03:03 inet addr:172.25.3.3 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe19:303/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[rootdocker ~]# docker exec -it container2 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq0 ttl64 time0.062 ms
64 bytes from 172.17.0.2: seq1 ttl64 time0.139 ms
64 bytes from 172.17.0.2: seq2 ttl64 time0.156 ms
^C
--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max 0.062/0.119/0.156 ms[rootdocker ~]# docker exec -it container2 ping 172.25.3.3
PING 172.25.3.3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq0 ttl64 time0.084 ms
64 bytes from 172.25.3.3: seq1 ttl64 time0.158 ms
^C
--- 172.25.3.3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max 0.084/0.121/0.158 ms使用link参数
容器的连接linking系统是除了端口映射外另一种可以与容器中应用进行交互的方式。它会在源和接收容器之间创建一个隧道接收容器可以看到源容器指定的信息。 使用这个参数容器必须设置一个名字也就是--name指定的值。
[rootdocker ~]# docker run -itd --name test busybox
03f11be7e04e6a378393a87f1c1711519ca7b264c416153dbc3ec18b2a047441--link参数的格式 --link name:alias , 其中name是要链接的容器的名称alias是这个链接的别名。
[rootdocker ~]# docker run -itd --namelink --link test:test busybox
e35a7be4bdbd733d32fa6287fb3e89012dce4765f040f104262e2fc6702d0b78
[rootdocker ~]# docker exec -it link ping test
PING test (172.17.0.10): 56 data bytes
64 bytes from 172.17.0.10: seq0 ttl64 time0.146 ms
64 bytes from 172.17.0.10: seq1 ttl64 time0.156 ms
^C
--- test ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max 0.146/0.151/0.156 ms如果忘记设置名字可以通过docker rename来重命名容器容器名字是唯一的。
此外--link还可以传递环境变量实现在两个容器之间共享环境变量。
四、Dokcer 网络模式 安装Docker时会自动创建3个网络可以使用docker network ls命令列出这些网络。
[rootdocker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d43919472f6e bridge bridge local
4775c0103fa3 host host local
973d096cf292 none null local我们在使用docker run创建容器时可以用--net选项指定容器的网络模式Docker有以下4种网络模式
Host模式使用--nethost指定。Container模式使用--netcontainer:NAME_or_ID指定。None模式使用--netnone指定。Bridge模式使用--netbridge指定默认设置。
1、Host模式
Docker底层使用了Linux的Namespaces技术来进行资源隔离如PID Namespace隔离进程Mount Namespace隔离文件系统Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境包括网卡、路由、Iptables规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式那么这个容器将不会获得一个独立的Network Namespace而是和宿主机共用一个Root Network Namespace。容器将不会虚拟出自己的网卡配置自己的IP等而是使用宿主机的IP和端口。出于安全考虑不推荐使用这种网络模式。
我们在192.168.200.111/24的机器上用Host模式启动一个含有WEB应用的Docker容器监听TCP 80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时看到的都是宿主机上的信息。而外界访问容器中的应用则直接使用192.168.200.111:80即可不用任何NAT转换就如直接跑在宿主机中一样。但是容器的其他方面如文件系统、进程列表等还是和宿主机隔离的。
[rootdocker ~]# docker run -itd --nethost --namehost busybox
52745f141d91e43ad425929cf7b36e767b9959374d4e437dcf297ad57ae26d22
[rootdocker ~]# docker exec -it host ifconfig
br-27728db882c0 Link encap:Ethernet HWaddr 02:42:0B:04:5C:41 inet addr:172.25.0.1 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:bff:fe04:5c41/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:90 errors:0 dropped:0 overruns:0 frame:0TX packets:11 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:7080 (6.9 KiB) TX bytes:782 (782.0 B)br-5b09991235f8 Link encap:Ethernet HWaddr 02:42:37:68:60:CD inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:37ff:fe68:60cd/64 Scope:LinkUP BROADCAST MULTICAST MTU:1500 Metric:1RX packets:112 errors:0 dropped:0 overruns:0 frame:0TX packets:75 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:9769 (9.5 KiB) TX bytes:8464 (8.2 KiB)docker0 Link encap:Ethernet HWaddr 02:42:18:18:54:E5 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:18ff:fe18:54e5/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:283686 errors:0 dropped:0 overruns:0 frame:0TX packets:449286 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:11712586 (11.1 MiB) TX bytes:1156721473 (1.0 GiB)
ens33 Link encap:Ethernet HWaddr 00:0C:29:F3:73:15 inet addr:192.168.147.136 Bcast:192.168.147.255 Mask:255.255.255.0inet6 addr: fe80::146a:2496:1fdc:4014/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:207612 errors:0 dropped:0 overruns:0 frame:0TX packets:62363 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:250150907 (238.5 MiB) TX bytes:9453140 (9.0 MiB)ens36 Link encap:Ethernet HWaddr 00:0C:29:F3:73:1F inet addr:192.168.242.149 Bcast:192.168.242.255 Mask:255.255.255.0inet6 addr: fe80::c96f:4c57:35a2:1a70/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:1038861 errors:0 dropped:0 overruns:0 frame:0TX packets:379009 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:1526767771 (1.4 GiB) TX bytes:23155635 (22.0 MiB)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:153 errors:0 dropped:0 overruns:0 frame:0TX packets:153 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:20535 (20.0 KiB) TX bytes:20535 (20.0 KiB)veth1b51205 Link encap:Ethernet HWaddr BA:E7:EB:5F:A9:A1 inet6 addr: fe80::b8e7:ebff:fe5f:a9a1/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:17 errors:0 dropped:0 overruns:0 frame:0TX packets:36 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:1482 (1.4 KiB) TX bytes:2792 (2.7 KiB)veth2169c93 Link encap:Ethernet HWaddr 8A:EC:07:67:69:26 inet6 addr: fe80::88ec:7ff:fe67:6926/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:37 errors:0 dropped:0 overruns:0 frame:0TX packets:112 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:4507 (4.4 KiB) TX bytes:9274 (9.0 KiB)[rootdocker ~]# ifconfig
br-27728db882c0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 172.25.0.1 netmask 255.255.0.0 broadcast 0.0.0.0inet6 fe80::42:bff:fe04:5c41 prefixlen 64 scopeid 0x20linkether 02:42:0b:04:5c:41 txqueuelen 0 (Ethernet)RX packets 8 bytes 656 (656.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 45 bytes 3490 (3.4 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0br-5b09991235f8: flags4099UP,BROADCAST,MULTICAST mtu 1500inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0inet6 fe80::42:37ff:fe68:60cd prefixlen 64 scopeid 0x20linkether 02:42:37:68:60:cd txqueuelen 0 (Ethernet)RX packets 17 bytes 1482 (1.4 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 36 bytes 2792 (2.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0docker0: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0inet6 fe80::42:18ff:fe18:54e5 prefixlen 64 scopeid 0x20linkether 02:42:18:18:54:e5 txqueuelen 0 (Ethernet)RX packets 283686 bytes 11712586 (11.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 449286 bytes 1156721473 (1.0 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 192.168.147.136 netmask 255.255.255.0 broadcast 192.168.147.255inet6 fe80::146a:2496:1fdc:4014 prefixlen 64 scopeid 0x20linkether 00:0c:29:f3:73:15 txqueuelen 1000 (Ethernet)RX packets 207635 bytes 250152587 (238.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 62382 bytes 9465432 (9.0 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens36: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 192.168.242.149 netmask 255.255.255.0 broadcast 192.168.242.255inet6 fe80::c96f:4c57:35a2:1a70 prefixlen 64 scopeid 0x20linkether 00:0c:29:f3:73:1f txqueuelen 1000 (Ethernet)RX packets 1038876 bytes 1526768671 (1.4 GiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 379009 bytes 23155635 (22.0 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags73UP,LOOPBACK,RUNNING mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10hostloop txqueuelen 1000 (Local Loopback)RX packets 153 bytes 20535 (20.0 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 153 bytes 20535 (20.0 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0veth1b51205: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet6 fe80::b8e7:ebff:fe5f:a9a1 prefixlen 64 scopeid 0x20linkether ba:e7:eb:5f:a9:a1 txqueuelen 0 (Ethernet)RX packets 17 bytes 1482 (1.4 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 36 bytes 2792 (2.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0veth2169c93: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet6 fe80::88ec:7ff:fe67:6926 prefixlen 64 scopeid 0x20linkether 8a:ec:07:67:69:26 txqueuelen 0 (Ethernet)RX packets 37 bytes 4507 (4.4 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 112 bytes 9274 (9.0 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、container模式
这个模式可以指定新创建的容器和已经存在的一个容器共享一个Network Namespace而不是和宿主机共享。新创建的容器不会创建自己的网卡配置自己的IP而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
使用--netcontainer:container_id/container_name多个容器使用共同的网络看到的ip是一样的。
[rootdocker ~]# docker run -itd --namecon1 busybox
3021151461b87b7e10a3e5bc19258422bc93c1cd76b6f12dc1fefd5d34787a58
[rootdocker ~]# docker exec -it con1 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:0C inet addr:172.17.0.12 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe11:c/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) [rootdocker ~]# docker run -itd --netcontainer:con1 --namecon2 busybox
c66cb6ccae7e1b7360278eb071cd734d89c76eb2cacb9b7beb281753d653ab62
[rootdocker ~]# docker exec -it con2 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:0C inet addr:172.17.0.12 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe11:c/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:656 (656.0 B) TX bytes:656 (656.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)3、none模式
在这种模式下Docker容器拥有自己的Network Namespace但是并不为Docker容器进行任何网络配置。也就是说这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
使用--netnone指定这种模式下不会配置任何网络。
[rootdocker ~]# docker run -itd --namenone --netnone busybox
4f8c9d711c3b0c60a2a79b76cb925945f7ba10658c363567ffe2aca216da0778
[rootdocker ~]# docker exec -it none ifconfig
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)4、bridge模式
bridge模式是Docker默认的网络设置属于一种NAT网络模型Docker daemon在启动的时候就会建立一个docker0网桥通过-b参数可以指定每个容器使用bridge模式启动时Docker都会为容器创建一对虚拟网络接口veth pair设备这对接口一端在容器的Network Namespace另一端在docker0这样就实现了容器与宿主机之间的通信。 在bridge模式下Docker容器与外部网络通信都是通过iptables规则控制的这也是Docker网络性能低下的一个重要原因。使用iptables -vnL -t nat可以查看NAT表在Chain Docker中可以看到容器桥接的规则。
[rootdocker ~]# iptables -vnL -t nat
Chain DOCKER (2 references)pkts bytes target prot opt in out source destination 0 0 RETURN all -- br-27728db882c0 * 0.0.0.0/0 0.0.0.0/0 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 RETURN all -- br-5b09991235f8 * 0.0.0.0/0 0.0.0.0/0 2 104 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32769 to:172.17.0.2:804 208 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:172.17.0.3:802 104 DNAT tcp -- !docker0 * 0.0.0.0/0 192.168.242.149 tcp dpt:9000 to:172.17.0 5、Overlay模式
这是Docker原生的跨主机多子网的网络模型当创建一个新的网络时Docker会在主机上创建一个Network NamespaceNetwork Namespace内有一个网桥网桥上有一个vxlan接口每个网络占用一个vxlan ID当容器被添加到网络中时Docker会分配一对veth网卡设备与bridge模式类似一端在容器里面另一端在本地的Network Namespace中。 容器A、B、C都在主机A上面而容器D、E则在主机B上面现在通过Overlay网络模型可以实现容器A、B、D处于同一个子网而容器C、E则处于另一个子网中。 Overlay中有一个vxlan ID值得范围为256~1000vxlan隧道会把每一个ID相同的网络沙盒连接起来实现一个子网。