docker 网络

docker中网络类型

bridge
默认网络驱动,应用程序在单独的容器中运行并且需要连接时往往用bridge驱动。

host
对于单机版容器,移除容器与docker宿主机之间的网络隔离,容器直接使用宿主机的网络。host只能用于swarm服务(docker 17.06 或者更高版本)

overlay
overlay网络连接多个docker守护进程,使用swarm服务使各个docker间进行交流。swarm服务与单机版容器,两个不同docker守护进程的单机版的容器都可以通过overlay网络进行交流。

macvlan
macvlan网络允许给容器分配MAC地址,让容器在网络中表现得像一个物理机。docker守护进程路由流量到容器基于MAC地址。当处理希望直接连接物理网络的遗留应用程序时,使用macvlan网络比通过路由流量到docker的宿主机网络栈更适合。

none
禁用网络

network plugin
允许安装使用第三方网络插件。

docker安装时自带网络

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
17e324f45964        bridge              bridge              local
6ed54d316334        host                host                local
7092879f2cc8        none                null                local

bridge网络

docker运行新容器时,如果没有指定network参数,则默认将容器添加到bridge网络里面。
同一个bridge网络里面各个容器可以通过docker分配的虚拟IP进行交流。

启动两个容器

$ docker run -dit --name alpine1 alpine ash

$ docker run -dit --name alpine2 alpine ash

$ docker network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "17e324f459648a9baaea32b248d3884da102dde19396c25b30ec800068ce6b10",
        "Created": "2017-06-22T20:27:43.826654485Z",
        "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,
        "Containers": {
            "602dbf1edc81813304b6cf0a647e65333dc6fe6ee6ed572dc0f686a3307c6a2c": {
                "Name": "alpine2",
                "EndpointID": "03b6aafb7ca4d7e531e292901b43719c0e34cc7eef565b38a6bf84acf50f38cd",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "da33b7aa74b0bf3bda3ebd502d404320ca112a268aafe05b4851d1e3312ed168": {
                "Name": "alpine1",
                "EndpointID": "46c044a645d6afc42ddd7857d19e9dcfb89ad790afb5c239a35ac0af5e8a5bc5",
                "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": {}
    }
]

容器alpine1可以通过ip直接访问alpine2。同时容器也可以通过bridge来访问外网。

用户自定义bridge网络

当用户需要多个局域网时,则可以创建多个bridge网络来进行分配。

$ docker network create --driver bridge alpine-net

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
e9261a8c9a19        alpine-net          bridge              local
17e324f45964        bridge              bridge              local
6ed54d316334        host                host                local
7092879f2cc8        none                null                local

一个容器可以同时加入到多个网络里面,此时,容器在每个网络里面都有一个ip, 此容器可以跟所在网络的容器网络连接。不通网络之间的容器网络不通。

你可能感兴趣的:(docker)