Docker网络
Docker在容器内部运行应用,这些应用之间的交互依赖于大量不同的网络,这意味着Docker需要强大的网络功能。
Docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络,单机意味着该网络只能在单个Docker主机上运行,并且只能与所在Docker主机上的容器进行连接。主要分为三种网络,none、host、bridge。
每个Docker主机都有一个默认的单机桥接网络。在Linux上网络名称为bridge,除非通过命令行创建容器时指定参数--network,否则默认情况下,新创建的容器都会连接到该网络。
Docker 安装时会自动在 host 上创建三个网络,使用docker network ls查看本机创建的docker网络
➜ first-network git:(1d4d04e9c) ✗ docker network ls
NETWORK ID NAME DRIVER SCOPE
63f7ed247cf6 bridge bridge local
6a36000d75cc host host local
31edf37a7261 none null local
可以通过docker network inspect查看某个网络具体描述
➜ ~ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "63f7ed247cf6bfbfb2bd811140ffa2136342a453079a486106328c000dcdb01f",
"Created": "2019-12-13T09:14:25.797831625Z",
"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": {},
"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.1 none 网络
none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 --network=none 指定使用 none 网络。
1.2 host 网络
连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。可以通过 --network=host 指定使用 host 网络。
1.3 bridge网络
在Linux Docker主机之上,默认的“bridge”网络被映射到内核中为“docker0”的Linux网桥。可以通过docker network inspect命令观察到上面的输出内容。
"com.docker.network.bridge.name": "docker0",
在启动容器时,可以根据--network=bridge指定docker网络。
1.4 自定义网络
Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络,我们后面有章节单独讨论。
常用命令
Docker网络有自己的子命令,主要包括以下几种。
- docker network ls用于列出运行在本地Docker主机上的全部网络。
- docker network create创建新的Docker网络。默认情况下,在Windows上会采用NAT驱动,在Linux上会采用Bridge驱动。读者可以使用-d参数指定驱动(网络类型)。
- docker network create -d overlay overnet会创建一个新的名为overnet的覆盖网络,其采用的驱动为Docker Overlay。
- docker network inspect提供Docker网络的详细配置信息。
- docker network prune删除Docker主机上全部未使用的网络。
- docker network rm删除Docker主机上指定网络。