docker创建之初有以下网络模式
root@vvkt7whznuckhiz2-0723575:~# docker network lsNETWORK ID NAME DRIVER SCOPE136aaf557ff8 bridge bridge local7de00a5707e9 host host locale84b7ddf13c5 none null local
查看系统内Docker网桥配置
root@vvkt7whznuckhiz2-0723575:~# ip a3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:bf:6d:35:16 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:bfff:fe6d:3516/64 scope linkvalid_lft forever preferred_lft forever
系统IP地址详解
root@vvkt7whznuckhiz2-0723575:~# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever# local network2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether fa:16:3e:80:22:6a brd ff:ff:ff:ff:ff:ffinet 192.168.1.9/24 brd 192.168.1.255 scope global dynamic eth0valid_lft 84731sec preferred_lft 84731secinet6 fe80::f816:3eff:fe80:226a/64 scope linkvalid_lft forever preferred_lft forever# ethernet 以太网3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:8a:6f:a8:29 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever# docker 虚拟网络层
网络模式的介绍
bridge 为每一个容器分配,设置IP地址,并且将容器链接到一个docker0的虚拟网桥,dockers网络连接的默认模式host 容器不会虚拟自己的网卡,配置IP等,而是使用宿主机的IP地址和端口none 容器有独立的Network namespace,但并没有对其进行任何网络设置,比如分配veth_pair和网桥连接,IP地址等container 新建容器不会船舰自己的网卡和配置自己的IP,而是和一个指定的容器共享IP,端口范围等;
1.1. bridge桥接网络模式
在该模式中,Docker 守护进程创建了一个虚拟以太网桥docker0, 新建的容器会自动桥接到这个接口,附加在其上的热呢网卡之间都能自动转发数据包。
默认情况下,守护进程会创建一堆对等的虚拟设备接口veth_pair, 将其中的一个接口设置为容器的etho接口(容器网卡),另外一个接口放在宿主机的命令空间中,以类似的vethxx的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上
比如我运行一个基于busybox镜像的容器,构建为bbox01, 查看ipaddr:
busybox被称为嵌入式Linux的瑞士军刀,整合了很多很小的unix下的通用功能到一个小的可执行文件中。
执行命令
# 创建容器docker run -it --name bbox01 busyboxip addr# 另开一个连接,在系统内查看ip addr# 安装工具包sudo apt install bridge-utils# 查看桥接模式的设备root@vvkt7whznuckhiz2-0723575:~# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.02428a6fa829 no vetha04eec4

docker network inspect bridge # docker命令查看使用bridge桥接模式创建的容器
网络模式示意图
[官网:网络模式]:Use bridge networks | Docker Documentation
1.2. host网络模式
概念
● host网络模式需要在创建容器时通过参数--net host 或者--network host 指定;● 采用host网络模式的Docker Container,可以直接使用宿主机的IP地址与外界进行通信,若宿主机的ethQ是一个公有 IP,那么容器也拥有这个公有IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行NAT转换;● host网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
创建主机并且查看网络
docker run -it --name bbox02 --network host busybox
1.3. none网络模式
概念
● none网络模式是指禁用网络功能,只有lo接口pocal的简写,代表127.0.0.1, 即localhost本地环回接口。在创建容器时通过参数--net none或者--network none 指定;● none 网络模式即不为Docker Container创建任何的网络环境,容器内部就只能使用loopback网络设备,不会再有其他的网络资源。可以说none模式为Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作为Docker开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了Docker 设计理念的开放。比如我基于none 网络模式创建了一个基于busybox 镜像构建的容器bbox03 ,查看ip addr :# 创建命令docker run -it --name bbox03 --net none busybox
IP地址比对
1.4. container网络模式
概念
●Container 网络模式是Docker 中-种较为特别的网络的模式。在创建容器时通过参数--net container :已运行的容器名称|ID或者--network container:已运行的容 器名称|ID指定;●处于这个模式下的Docker容器会共享- 个网络栈,这样两个容器之间可以使用localhost高效快速通信。Container网络模式即新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。# 创建新的容器,指定被共享网络的容器docker run -it --name bbox05 --network container:bbox01 busybox# 分别进入两个容器查看IP地址docker exec -it bbox01 sh# 创建共享之前,首先启动被网络依赖的容器,共享方式创建的容器,IP地址跟随被依赖容器
图示
地址比较
1.5. link
121
12
123
概念
1. 虽然Docker提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理,以及启用容器名称到IP地址的自动DNS解析.2. 从Docker1.10版本开始,```docker daemon```实现了一个内嵌的```DNS server```,使容器可以直接通过容器名称进行通信。方法很简单,只要在创建容器时使用```--name```为容器命名即可。3. 但是使用```Docker DNS```有个限制:只能在```user-defined```网络中使用。也就是说,默认的```bridge```网络是无法使用DNS的,所以我们就需要自定义网络。
产生业务需求的原因
# 共同使用桥接模式,需要多个容器同时启动,每暂停一次,关联容器就会重新分配一次内部IP地址,变址对于网络通信是极为不利的# 以下通过容器之间直接的互相ping来演示这种弊端[bbox05 ping bbox01]## server 1docker exec -it bbox01 ship addr## server 2docker run -it --name bbox05 busyboxping 172.17.0.3## server 1docker stop bbox01## server 2docker exec -it bbox05 shping 172.17.0.3
实现步骤
先行创建一个自定义网络
root@vvkt7whznuckhiz2-0723575:~# docker network create custom-network5cfe6a90020f23b95eacd76f3588c84842b431cec04f35074a66e0abbdcaae89
查看已创建的网络
root@vvkt7whznuckhiz2-0723575:~# docker network lsNETWORK ID NAME DRIVER SCOPE63ec19dbd16b bridge bridge local5cfe6a90020f custom-network bridge local7de00a5707e9 host host locale84b7ddf13c5 none null local
俩台主机分别使用自定义网络创建容器
## server 1docker run -it --name bbox06 --net custom-network busyboxip addrping 172.18.0.3## server 2docker run -it --name bbox07 --net custom-network busyboxip addrping 172.18.0.3
连接网络
通过docker network connect 网络名称 容器名称 为容器连接新的网络模式
root@vvkt7whznuckhiz2-0723575:~# docker network connect --helpUsage: docker network connect [OPTIONS] NETWORK CONTAINERConnect a container to a networkOptions:--alias strings Add network-scoped alias for the container--driver-opt strings driver options for the network--ip string IPv4 address (e.g., 172.30.100.104)--ip6 string IPv6 address (e.g., 2001:db8::33)--link list Add link to another container--link-local-ip strings Add a link-local address for the containerroot@vvkt7whznuckhiz2-0723575:~#
命令示例
docker network connect custom-network bbox05
断开网络
通过docker network disconnect 网络名称 容器名称断开网络
docker network disconnect custom-network bbox05
移除网络
通过docker network rm 网络名称断开网络
docker network rm custom-network
12现场保存
svim /etc/sysconfig/network-scripts/ifcfg-ens32TYPE=EthernetBOOTPROTO=staticNAME=ens32DEVICE=ens32ONBOOT=yesIPADDR=192.168.10.11NETMASK=255.255.255.0GATEWAY=192.168.10.2DNS1=192.168.10.2DNS2=114.114.114.114DNS3=8.8.8.8
12
root@vvkt7whznuckhiz2-0723575:/etc/netplan# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether fa:16:3e:80:22:6a brd ff:ff:ff:ff:ff:ffinet 192.168.1.9/24 brd 192.168.1.255 scope global dynamic eth0valid_lft 85767sec preferred_lft 85767secinet6 fe80::f816:3eff:fe80:226a/64 scope linkvalid_lft forever preferred_lft forever3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:a8:83:87:39 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:a8ff:fe83:8739/64 scope linkvalid_lft forever preferred_lft forever10: br-5cfe6a90020f: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:56:dc:f5:d5 brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global br-5cfe6a90020fvalid_lft forever preferred_lft foreverinet6 fe80::42:56ff:fedc:f5d5/64 scope linkvalid_lft forever preferred_lft forever
原始配置
network:ethernets:eth0:dhcp4: truedhcp6: trueversion: 2
补充—DaoCloud
网址:
[镜像市场]:Hub · DaoCloud
国内付费镜像服务,可以快速拉取
