WHCSRL 技术网

Docker 网络配置_qq

理解 Docker0

先查看本地 ip

[root@iZwz98zi7ua638a1dxozhyZ ~]# ip addr
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:16:3e:12:13:cd brd ff:ff:ff:ff:ff:ff
    inet 172.18.115.220/20 brd 172.18.127.255 scope global dynamic eth0
       valid_lft 305183662sec preferred_lft 305183662sec
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:9e:98:e4:70 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

可以得到三个结果

lo 127.0.0.1 			# 本机回环地址
eth0 172.18.115.220 	# 阿里云的私有IP
docker0 172.17.0.1 		# docker网桥
  • 1
  • 2
  • 3

问题:Docker 是如何处理容器网络访问的?

Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据 Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

在这里插入图片描述

Docker 容器网络就很好的利用了 Linux 虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫 veth pair);

Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为 Linux 是在内核中进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。

自定义网络

基本命令查看

[root@iZwz98zi7ua638a1dxozhyZ ~]# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

查看所有网络

[root@iZwz98zi7ua638a1dxozhyZ ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e6b07b1d7593   bridge    bridge    local
7e7dc5e1d016   host      host      local
3c720f930b87   none      null      local
  • 1
  • 2
  • 3
  • 4
  • 5

所有网络模式

网络模式配置说明
bridge模式–net=bridge默认值,在 Docker 网桥 docker0 上为容器创建新的网络栈
none模式–net=none不配置网络,用户可以稍后进入容器,自行配置
container模式–net=container:name/id容器和另外一个容器共享 Network namespace。kubernetes 中的pod 就是多个容器共享一个 Network namespace。
host模式–net=host容器和宿主机共享 Network namespace
用户自定义–net=自定义网络用户自己使用 network 相关命令定义网络,创建容器的时候可以指定为自己定义的网络

查看一个具体的网络的详细信息

[root@iZwz98zi7ua638a1dxozhyZ ~]# docker network inspect e6b07b1d7593
[
    {
        "Name": "bridge",
        "Id": "e6b07b1d7593606ed2d9ebab36ddf09ad40f37d61e7933c76d8a52ba396b3565",
        "Created": "2021-07-05T20:58:03.67328693+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "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": {}
    }
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37