1. 19默认网关

docker创建之初有以下网络模式

  1. root@vvkt7whznuckhiz2-0723575:~# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 136aaf557ff8 bridge bridge local
  4. 7de00a5707e9 host host local
  5. e84b7ddf13c5 none null local

查看系统内Docker网桥配置

  1. root@vvkt7whznuckhiz2-0723575:~# ip a
  2. 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
  3. link/ether 02:42:bf:6d:35:16 brd ff:ff:ff:ff:ff:ff
  4. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::42:bfff:fe6d:3516/64 scope link
  7. valid_lft forever preferred_lft forever


系统IP地址详解

  1. root@vvkt7whznuckhiz2-0723575:~# ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::1/128 scope host
  7. valid_lft forever preferred_lft forever
  8. # local network
  9. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  10. link/ether fa:16:3e:80:22:6a brd ff:ff:ff:ff:ff:ff
  11. inet 192.168.1.9/24 brd 192.168.1.255 scope global dynamic eth0
  12. valid_lft 84731sec preferred_lft 84731sec
  13. inet6 fe80::f816:3eff:fe80:226a/64 scope link
  14. valid_lft forever preferred_lft forever
  15. # ethernet 以太网
  16. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  17. link/ether 02:42:8a:6f:a8:29 brd ff:ff:ff:ff:ff:ff
  18. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  19. valid_lft forever preferred_lft forever
  20. # docker 虚拟网络层


网络模式的介绍

  1. bridge 为每一个容器分配,设置IP地址,并且将容器链接到一个docker0的虚拟网桥,dockers网络连接的默认模式
  2. host 容器不会虚拟自己的网卡,配置IP等,而是使用宿主机的IP地址和端口
  3. none 容器有独立的Network namespace,但并没有对其进行任何网络设置,比如分配veth_pair和网桥连接,IP地址等
  4. container 新建容器不会船舰自己的网卡和配置自己的IP,而是和一个指定的容器共享IP,端口范围等;

1.1. bridge桥接网络模式


在该模式中,Docker 守护进程创建了一个虚拟以太网桥docker0, 新建的容器会自动桥接到这个接口,附加在其上的热呢网卡之间都能自动转发数据包。
默认情况下,守护进程会创建一堆对等的虚拟设备接口veth_pair, 将其中的一个接口设置为容器的etho接口(容器网卡),另外一个接口放在宿主机的命令空间中,以类似的vethxx的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上

比如我运行一个基于busybox镜像的容器,构建为bbox01, 查看ipaddr:

busybox被称为嵌入式Linux的瑞士军刀,整合了很多很小的unix下的通用功能到一个小的可执行文件中。


执行命令

  1. # 创建容器
  2. docker run -it --name bbox01 busybox
  3. ip addr
  4. # 另开一个连接,在系统内查看
  5. ip addr
  6. # 安装工具包
  7. sudo apt install bridge-utils
  8. # 查看桥接模式的设备
  9. root@vvkt7whznuckhiz2-0723575:~# brctl show
  10. bridge name bridge id STP enabled interfaces
  11. docker0 8000.02428a6fa829 no vetha04eec4


网络模式详解及容器间网络通信 - 图1

  1. docker network inspect bridge # docker命令查看使用bridge桥接模式创建的容器


网络模式详解及容器间网络通信 - 图2

网络模式示意图


[官网:网络模式]:Use bridge networks | Docker Documentation
网络模式详解及容器间网络通信 - 图3

1.2. host网络模式

概念

  1. host网络模式需要在创建容器时通过参数--net host 或者--network host 指定;
  2. 采用host网络模式的Docker Container,可以直接使用宿主机的IP地址与外界进行通信,若宿主机的ethQ是一个公有 IP,那
  3. 么容器也拥有这个公有IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行NAT转换;
  4. host网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

创建主机并且查看网络

  1. docker run -it --name bbox02 --network host busybox


网络模式详解及容器间网络通信 - 图4

1.3. none网络模式

概念

  1. none网络模式是指禁用网络功能,只有lo接口pocal的简写,代表127.0.0.1, localhost本地环回接口。在创建容器时通过参数--net none或者--network none 指定;
  2. none 网络模式即不为Docker Container创建任何的网络环境,容器内部就只能使用loopback网络设备,不会再有其他的网络资源。
  3. 可以说none模式为Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作
  4. Docker开发者,才能在这基础做其他无限多可能的网络定制开发。
  5. 这也恰巧体现了Docker 设计理念的开放。比如我基于none 网络模式创建了一个基于busybox 镜像构建的容器bbox03 ,查看ip addr :
  6. # 创建命令
  7. docker run -it --name bbox03 --net none busybox

IP地址比对


网络模式详解及容器间网络通信 - 图5

1.4. container网络模式

概念

  1. Container 网络模式是Docker 中-种较为特别的网络的模式。在创建容器时通过参数--net container :已运行的容器名
  2. 称|ID或者--network container:已运行的容 器名称|ID指定;
  3. ●处于这个模式下的Docker容器会共享- 个网络栈,这样两个容器之间可以使用localhost高效快速通信。
  4. Container网络模式即新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样
  5. 两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。
  6. # 创建新的容器,指定被共享网络的容器
  7. docker run -it --name bbox05 --network container:bbox01 busybox
  8. # 分别进入两个容器查看IP地址
  9. docker exec -it bbox01 sh
  10. # 创建共享之前,首先启动被网络依赖的容器,共享方式创建的容器,IP地址跟随被依赖容器

图示


网络模式详解及容器间网络通信 - 图6

地址比较


网络模式详解及容器间网络通信 - 图7

1.5. link


121
12
123

  1. 自定义网络

概念

  1. 1. 虽然Docker提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理,以及启用容器名称到IP地址的自动DNS解析.
  2. 2. Docker1.10版本开始,```docker daemon```实现了一个内嵌的```DNS server```,使容器可以直接通过容器名称进行通信。方法很简单,只要在创建容器时使用```--name```为容器命名即可。
  3. 3. 但是使用```Docker DNS```有个限制:只能在```user-defined```网络中使用。也就是说,默认的```bridge```网络是无法使用DNS的,所以我们就需要自定义网络。

产生业务需求的原因

  1. # 共同使用桥接模式,需要多个容器同时启动,每暂停一次,关联容器就会重新分配一次内部IP地址,变址对于网络通信是极为不利的
  2. # 以下通过容器之间直接的互相ping来演示这种弊端[bbox05 ping bbox01]
  3. ## server 1
  4. docker exec -it bbox01 sh
  5. ip addr
  6. ## server 2
  7. docker run -it --name bbox05 busybox
  8. ping 172.17.0.3
  9. ## server 1
  10. docker stop bbox01
  11. ## server 2
  12. docker exec -it bbox05 sh
  13. ping 172.17.0.3

实现步骤

先行创建一个自定义网络

  1. root@vvkt7whznuckhiz2-0723575:~# docker network create custom-network
  2. 5cfe6a90020f23b95eacd76f3588c84842b431cec04f35074a66e0abbdcaae89

查看已创建的网络

  1. root@vvkt7whznuckhiz2-0723575:~# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 63ec19dbd16b bridge bridge local
  4. 5cfe6a90020f custom-network bridge local
  5. 7de00a5707e9 host host local
  6. e84b7ddf13c5 none null local

俩台主机分别使用自定义网络创建容器

  1. ## server 1
  2. docker run -it --name bbox06 --net custom-network busybox
  3. ip addr
  4. ping 172.18.0.3
  5. ## server 2
  6. docker run -it --name bbox07 --net custom-network busybox
  7. ip addr
  8. ping 172.18.0.3

连接网络

通过docker network connect 网络名称 容器名称 为容器连接新的网络模式

  1. root@vvkt7whznuckhiz2-0723575:~# docker network connect --help
  2. Usage: docker network connect [OPTIONS] NETWORK CONTAINER
  3. Connect a container to a network
  4. Options:
  5. --alias strings Add network-scoped alias for the container
  6. --driver-opt strings driver options for the network
  7. --ip string IPv4 address (e.g., 172.30.100.104)
  8. --ip6 string IPv6 address (e.g., 2001:db8::33)
  9. --link list Add link to another container
  10. --link-local-ip strings Add a link-local address for the container
  11. root@vvkt7whznuckhiz2-0723575:~#

命令示例

  1. docker network connect custom-network bbox05

断开网络


通过docker network disconnect 网络名称 容器名称断开网络

  1. docker network disconnect custom-network bbox05

移除网络


通过docker network rm 网络名称断开网络

  1. docker network rm custom-network
  1. 容器间网络通信


12现场保存

  1. svim /etc/sysconfig/network-scripts/ifcfg-ens32
  2. TYPE=Ethernet
  3. BOOTPROTO=static
  4. NAME=ens32
  5. DEVICE=ens32
  6. ONBOOT=yes
  7. IPADDR=192.168.10.11
  8. NETMASK=255.255.255.0
  9. GATEWAY=192.168.10.2
  10. DNS1=192.168.10.2
  11. DNS2=114.114.114.114
  12. DNS3=8.8.8.8


12

  1. root@vvkt7whznuckhiz2-0723575:/etc/netplan# ip a
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::1/128 scope host
  7. valid_lft forever preferred_lft forever
  8. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  9. link/ether fa:16:3e:80:22:6a brd ff:ff:ff:ff:ff:ff
  10. inet 192.168.1.9/24 brd 192.168.1.255 scope global dynamic eth0
  11. valid_lft 85767sec preferred_lft 85767sec
  12. inet6 fe80::f816:3eff:fe80:226a/64 scope link
  13. valid_lft forever preferred_lft forever
  14. 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  15. link/ether 02:42:a8:83:87:39 brd ff:ff:ff:ff:ff:ff
  16. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  17. valid_lft forever preferred_lft forever
  18. inet6 fe80::42:a8ff:fe83:8739/64 scope link
  19. valid_lft forever preferred_lft forever
  20. 10: br-5cfe6a90020f: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  21. link/ether 02:42:56:dc:f5:d5 brd ff:ff:ff:ff:ff:ff
  22. inet 172.18.0.1/16 brd 172.18.255.255 scope global br-5cfe6a90020f
  23. valid_lft forever preferred_lft forever
  24. inet6 fe80::42:56ff:fedc:f5d5/64 scope link
  25. valid_lft forever preferred_lft forever


原始配置

  1. network:
  2. ethernets:
  3. eth0:
  4. dhcp4: true
  5. dhcp6: true
  6. version: 2

补充—DaoCloud


网址:
[镜像市场]:Hub · DaoCloud
国内付费镜像服务,可以快速拉取