Docker教程 · 2024年11月18日

Docker的命令之网络管理 network

在介绍 docker network的命令之前,务必先知道 network 在docker体系中扮演的角色、特性、以及作用。参考一篇转载的文章:Docker network的网络特性,使用 docker network –help ,可以查看所有network(网络)相关的命令。

 

Usage:    docker network COMMAND

Manage networks

Options:
      --help   Print usage

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.
# 可以使用 docker network COMMAND --help ,继续查看使用说明。

一、详细介绍

ls 列出所有当前主机上或Swarm集群上的网络
例如:docker network ls
例如:docker network ls -q
NETWORK ID          NAME                DRIVER              SCOPE
8a571a96526f        backend             bridge              local
f44cc63626bc        bridge              bridge              local
04a2db81d0f4        frontend            bridge              local
0d1ca2af95ea        host                host                local
3852b9cae762        none                null                local注:其中 NAME为bridge、host、none为内置的docker网络,无法删除
rm 删除一个网络
create 创建一个网络
格式:docker network create [OPTIONS] NETWORK
常用选项
-d, –driver #可以指定bridge或内置网络驱动overlay,默认bridge
–gateway #主子网的IPv4或IPv6网关
–ingress  #Create swarm routing-mesh network
–internal #限制外网网络连接到这个网络
–ip-range #从一个ip范围内分配IP,使用CIDR的方式
–ipam-driver string    # IP Address Management Driver (default “default”)
–ipam-opt map           #Set IPAM driver specific options (default map[])
–ipv6 #启用Ipv6网络
–label list            # Set metadata on a network
-o, –opt map                Set driver specific options (default map[])
–subnet #使用CIDR的方式创建子网例如:docker network create -d bridge frontend
例如:docker network create –subnet=192.168.50.0/24 br0 #创建192.168.50.0/24的子网
例如:docker network create –subnet=192.168.50.0/24 –ip-range=192.168.50.0/24 br0
例如:docker network create –subnet=192.168.10.0/24 –internal br1
prune 清除未使用的docker网络
例如:docker network prune -f
connect 将容器添加进一个已有网络
例如:docker network connect br0 d7debaa899a1
例如:docker network connect –ip 192.168.50.101 br0 d7debaa899a1 指定容器的IP
可以使用 docker inspect d7debaa899a1 查看 Networks
disconnect 将容器从网络中移除
例如:docker network disconnect br0 d7debaa899a1
可以使用 docker inspect d7debaa899a1 查看 Networks
inspect 查看网络详情
例如:docker network inspect f6e49456403b

 二、创建网络

docker network create用来创建一个新的网络。其中–driver可以指定bridge或内置网络驱动overlay。如果安装了第三方的或自己编写的网络驱动,也可以指定到这里。如果不指定–driver选项,这个命令将自动为你创建一个bridge网络。当安装docker engine时它自动创建了一个bridge网络。这个网络对应于Engine传统上依赖的docker0 bridge。当使用docker run启动一个容器时会自动连接到这个bridge网络。不可以删除这个默认的bridge网络,不过可以使用docker network create命令来创建一个新的。

docker network create -d bridge my-bridge-network

bridge网络是在单台Engine安装上的隔离网络。如果想创建一个跨多个运行着Engine的docker主机,必须创建一个overlay网络。不像bridge网络,在创建overlay网络之前,需要一些预存在的条件。这些条件是:

  • 一个能够访问的键值存储。Engine支持Consul, Etcd, 和ZooKeeper (分布式的存储)键值存储.
  • 集群中的节点能够连接到这个键值存储。
  • 在集群中的每台主机正确地配置Engine daemon。

dockerd支持overlay网络的选项是:

  • –cluster-store
  • –cluster-store-opt
  • –cluster-advertise

虽然不是必须的,但推荐安装docker swarm来管理组成你的网络的集群。Swarm提供了成熟的发现和服务器管理工具,可以帮助你更好地管理集群。
一旦满足了overlay网络的配置前提条件,只需要在集群中的任何一台主机执行创建网络命令:

docker network create -d overlay my-multihost-network

网络名称必须是唯一的。docker daemon虽然会尝试识别名称冲突,但无法保证都会工作。避免名称冲突这个是用户的责任。

三、连接容器

当运行一个容器时,使用–network标志来连接它到一个网络。下面的示例是把busybox容器添加到mynet网络:

$ docker run -itd --network=mynet busybox

如果想在容器已经在运行时把它添加到一个网络,使用docker network connect子命令。
可以连接多个容器到一个相同的网络。一旦连接成功,这些容器就可以使用另一个容器的IP地址或名称来互相通信。对于支持多主机连接的overlay网络或自定义插件,那些连接到相同的多主机网络但在不同的Engine启动的容器也能够以这种方式来互相通信。
可以使用docker network disconnect命令来从一个网络断开一个容器。

四、指定高级选项

参考上表

五、网络内部模式

默认下,当连接一个容器到一个overlay网络时,docker同时也连接到bridge网络来提供外部连接。如果想创建一个与外部隔离的overlay网络,可以指定–internal选项。