【Docker】docker网络—bridge网桥网络详悉

2022-12-13 17:54:30 浏览数 (1)

文章目录

一、docker网络概述

Docker 容器和服务如此强大的原因之一是,可以将它们连接在一起,或者将它们连接到非 Docker 工作负载。 Docker 容器和服务甚至不需要知道它们部署在 Docker 上,或者它们的对等节点是否也是 Docker 工作负载。 无论 Docker 主机运行的是 Linux、Windows 还是两者的混合,都可以使用 Docker 以与平台无关的方式管理它们。

二、docker网络—桥接模式

Use bridge networks—使用桥接网络

  • 就 Docker 而言,网桥网络使用软件网桥,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络的容器的隔离。
  • 网桥网络适用于在同一 Docker 守护程序主机上运行的容器
  • 启动Docker容器时,自动创建一个默认网桥网络,用户也可以自定义网桥网络。用户定义的网桥网络优先于默认网桥网络。

三、用户自定义网桥和默认网桥之间的区别

用户定义的网桥在容器之间提供自动 DNS 解析

  • 默认网桥网络上的容器只能通过 IP 地址相互访问
  • 用户自定义的网桥网络上,容器可以通过名称或别名相互解析。

用户定义的网桥提供更好的隔离

  • 所有未指定容器的容器都将连接到默认网桥网络。这可能是一个风险,因为不相关的堆栈/服务/容器能够进行通信。
  • 使用用户定义的网络提供了一个作用域网络,在该网络中,只有连接到该网络的容器才能进行通信。

容器可以动态地从用户自定义的网络中附加和分离

  • 在容器的生存期内,可以动态连接容器或将其与用户定义的网络断开连接。若要从默认网桥网络中删除容器,需要停止该容器并使用不同的网络选项重新创建它。

每个用户定义的网络都会创建一个可配置的网桥

  • 如果容器使用默认网桥网络,则可以对其进行配置,但所有容器都使用相同的设置,例如 MTU 和规则。此外,配置默认网桥网络发生在 Docker 本身之外,并且需要重新启动 Docker。
  • 用户自定义的网桥网络是使用 创建和配置的。如果不同的应用程序组具有不同的网络要求,则可以在创建每个用户定义的网桥时单独配置它。

默认网桥网络上的链接容器共享环境变量

  • 多个容器可以使用 Docker 卷挂载包含共享信息的文件或目录。
  • 可以使用多个容器一起启动,并且组合文件可以定义共享变量。
  • 可以使用 swarm 服务而不是独立容器,并利用共享密钥和配置。

四、docker网络—bridge桥接网络演示说明

1、默认网桥网络

当安装完docker环境后,主机上会默认创建一个名为docker0的虚拟网桥。 当启动docker容器时,容器网络会默认连接到dockr0虚拟网桥,实现容器之间的互相通信访问。 使用ifconfigip addressip link show docker0等相关命令即可查看。

代码语言:javascript复制
[root@docker ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:d8ff:fef4:bc6a  prefixlen 64  scopeid 0x20<link>
        ether 02:42:d8:f4:bc:6a  txqueuelen 0  (Ethernet)
        RX packets 147  bytes 371597 (362.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 167  bytes 30457 (29.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.66  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::20c:29ff:fefa:94d1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:fa:94:d1  txqueuelen 1000  (Ethernet)
        RX packets 248814  bytes 368066201 (351.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39275  bytes 3106640 (2.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@docker ~]# ip address | grep docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
9: vethe4e03be@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 

[root@docker ~]# ip link show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether 02:42:d8:f4:bc:6a brd ff:ff:ff:ff:ff:ff

使用默认网桥网络,创建tomcat容器 查看此容器的网络信息。

具体配置过程参考此链接:【Docker】在Docker环境中安装Tomcat服务

代码语言:javascript复制
# 创建并启动tomcat容器
[root@docker ~]# docker run -d -p 3366:8080 --name tomcat-xybdiy tomcat
729823bcf07a397ee8ff13df621c7fc8efa89974b3be8cb296d8ad3882a283ef

###############################
# 参数解释:	
# -p : 宿主机端口:容器内部端口
# -d : 代表后台运行
# --name : 给容器命名
###############################

# 查看tomcat容器
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                       NAMES
729823bcf07a   tomcat    "catalina.sh run"   47 seconds ago   Up 47 seconds   0.0.0.0:3366->8080/tcp, :::3366->8080/tcp   tomcat-xybdiy

# 查看tomcat容器网络信息
# 方式一:在主机上查看
[root@docker ~]# ifconfig
vethe4e03be: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::14f3:b1ff:fec2:6559  prefixlen 64  scopeid 0x20<link>
        ether 16:f3:b1:c2:65:59  txqueuelen 0  (Ethernet)
        RX packets 44  bytes 123179 (120.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 58  bytes 9655 (9.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 方式二:进入容器内查看
root@729823bcf07a:/etc/apt# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 10703  bytes 11117235 (10.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5597  bytes 427630 (417.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 方法三:不进入tomcat容器内,直接查看它的网卡信息。
[root@docker ~]# docker exec -it tomcat-xybdiy ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 10703  bytes 11117235 (10.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5597  bytes 427630 (417.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

使用默认网络,实现主机和容器之间的通信

代码语言:javascript复制
# tomcat容器内的网卡信息与在主机上查看到的虚拟网卡是一样的。说明tomcat容器和主机之间可以相互访问。如下执行结果所示。
# 容器内ping主机
root@729823bcf07a:/usr/local/tomcat# ping 192.168.200.66 -c 3
PING 192.168.200.66 (192.168.200.66) 56(84) bytes of data.
64 bytes from 192.168.200.66: icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from 192.168.200.66: icmp_seq=2 ttl=64 time=0.129 ms
64 bytes from 192.168.200.66: icmp_seq=3 ttl=64 time=0.040 ms

--- 192.168.200.66 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.040/0.074/0.129/0.039 ms
root@729823bcf07a:/usr/local/tomcat#

# 主机ping容器
[root@docker ~]# ping 172.17.0.2 -c 3
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.039 ms

--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.039/0.052/0.073/0.016 ms
[root@docker ~]#

0 人点赞