05-Docker网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangjun0210/article/details/86076971

1. Docker 网络模式

Docker有bridge、container、host、none 4种网络模式,我们在使用docker run创建Docker容器时,可以用–net选项指定容器的网络模式,若没有指定,默认bridge,如下表

网络模式 指定 说明
bridge --net=bridge 默认模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信
container --net=container:容器名或ID 创建的容器不会创建自己的网卡、配置自己的IP,而是和一个指定的容器共享IP、端口范围
host --net=host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
none --net=none 该模式关闭了容器的网络功能

2. 自定义网络模式

语法

$ docker network create --driver bridge new_bridge

3. bridge模式

3.1 bridge模式的拓扑

当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.0.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)。单机环境下的网络拓扑如下,主机地址为10.10.0.186/24。
在这里插入图片描述

3.2 网络模式详解

  1. 在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

  2. Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth65f9这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看。

$ brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.024257a5b606	no	

若出现

-bash: brctl: command not found

请执行如下命令安装

$ yum install bridge-utils
  1. 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。
# 运行容器
$ docker run --name=nginx_bridge --net=bridge -p 80:80 -d nginx  

# 查看容器
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
2239247b37d0        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   nginx_bridge

# 查看容器网络
$ docker inspect 2239247b37d0
 "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "1e6a2db2eb6d44ab97e384b7e84fe91a4215c95dd1b3afd7d485d3d04e144b0c",
                    "EndpointID": "eea4399f79b7dc40c57bb897eb17441322c8faedf0e3188bffc530f32bcb4bf4",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "1e6a2db2eb6d44ab97e384b7e84fe91a4215c95dd1b3afd7d485d3d04e144b0c",
        "Created": "2019-01-07T03:18:11.911442255-05: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": {
            "2239247b37d0adacbcb360bd249bdb123b1c7baa5371b57b348046ccbe418ca0": {
                "Name": "nginx_bridge",
                "EndpointID": "eea4399f79b7dc40c57bb897eb17441322c8faedf0e3188bffc530f32bcb4bf4",
                "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": {}
    }
]

猜你喜欢

转载自blog.csdn.net/huangjun0210/article/details/86076971
今日推荐