Docker容器技术之Docker网络

Docker容器技术之Docker网络

说明,在本文中,所有的images采用的是busybox:latest。系统采用的是Ubuntu22.04

一、Dokcer网络的分类

Docker安装完毕后会在主机上建立三个网络:

命令详细显示了三种网络的类型
从上图中可以看到,网络类型分别为bridge、host、null.

二、各种网络的用途

1. bridge网络
Docker安装时会创建一个命名为docker0的Linux bridge。如果不指定–network,创建的容器默认都会挂到docker0上,如下图所示:
docker0
当前docker0上没有任何其他网络设备,我们创建一个容器看看。
在这里插入图片描述
从图中可以看到当创建好容器之后,在bridge网络上面创建了网络接口,接口名称为veth6477b8c,veth6477b8c就是新创建容器的虚拟网卡的另一头的网络接口的名字。
在安装完Docker之后,docker0的详细信息如下:

helmer@Hanssen:~$ docker network inspect bridge 
[
    {
        "Name": "bridge",
        "Id": "af3aa424ee39ec0c353e9b56b7321efa22db8bc9d1acc6c6fad9384da173459d",
        "Created": "2022-07-19T09:16:08.310884499+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "913679c219d814bf1b78378c680571b45f4351510cf9e2a04b7aa1fcbe3d1b3c": {
                "Name": "flamboyant_pare",
                "EndpointID": "451c45c3d0695540fa9993e140cabecdf2736fa92175f985154fa1cf3de6be52",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
helmer@Hanssen:~$ 

容器的网络信息如下图

helmer@Hanssen:~$ docker attach 9136
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 

其中虚拟网卡eth0@if7对应的就是bridge网络上面的veth6477b8c接口的另一头,这个做个简单的理解就是eth0@if7是虚拟机的网络接口名称,veth6477b8c是虚拟交换机(docker网络)上面的接口名称,这两个网口利用网线相连接。容器启动之后,容器会从bridge网络上面获得分配的地址172.17.0.2/16,bridge网络上面的IP地址范围为 “Subnet”: “172.17.0.0/16”,“Gateway”: “172.17.0.1”,这个就像是DHCP分配IP地址一样。

bridge网络是经常用到的网络。

2. host
连接到host网络的容器共享Docker host的网络栈,容器的网络配置与host完全一样。

helmer@Hanssen:~$ docker run -it --network=host busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel qlen 1000
    link/ether 00:0c:29:c3:3a:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.163.128/24 brd 192.168.163.255 scope global dynamic noprefixroute ens33
       valid_lft 1617sec preferred_lft 1617sec
    inet6 fe80::baa0:96ed:4ed5:5daa/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:02:da:24:5e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:2ff:feda:245e/64 scope link 
       valid_lft forever preferred_lft forever
/ # helmer@Hanssen:~$ ip a
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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c3:3a:9e brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.163.128/24 brd 192.168.163.255 scope global dynamic noprefixroute ens33
       valid_lft 1607sec preferred_lft 1607sec
    inet6 fe80::baa0:96ed:4ed5:5daa/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:02:da:24:5e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:2ff:feda:245e/64 scope link 
       valid_lft forever preferred_lft forever

从上面的脚本中可以看到,容器的网络和主机的网络完全一样。
host网络主要用于对网路传输要求较高的要求,但是一定要考虑端口的冲突问题。
3. none网络
顾名思义,none网络就是什么都没有的网络。挂在这个网络下的容器除了lo,没有其他任何网卡。容器创建时,可以通过–network=none指定使用none网络。
在这里插入图片描述从上图可以看出,容器内除了lo,没有任何的网卡。
这样一个封闭的网络可以用在需要安全行较高的场景内,比如生成随机密码,避免密码被获取。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helmer_hanssen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值