Docker命令行参考(35) – docker swarm leave脱离集群

  1. Usage:  docker swarm leave [OPTIONS]
  2.  
  3. Leave the swarm (workers only).
  4.  
  5. Options:
  6.       –force   Force this node to leave the swarm, ignoring warnings
  7.       –help    Print usage

当在一个worker节点执行这个命令时,这个节点将脱离集群。
可以在一个manager节点上使用–force选项来从集群删除它。不过,这不会重新配置集群来确保集群有足够的manager节点来维持一个法定仲裁人数。从一个集群删除一个manager节点的安全方法是把它降级为worker然后不使用–force来执行这个命令脱离集群。只在manager节点脱离集群后不再使用这个集群才使用–force选项,如单节点的集群。

如下示例:

  1. $ docker node ls
  2. ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  3. 7ln70fl22uw2dvjn2ft53m3q5    worker2   Ready   Active
  4. dkp8vy1dq1kxleu9g4u78tlag    worker1   Ready   Active
  5. dvfxp4zseq4s0rih1selh0d20 *  manager1  Ready   Active        Leader

要删除worker2,在worker2主机上执行如下命令:

  1. $ docker swarm leave
  2. Node left the default swarm.

Docker命令行参考(34) – docker swarm join加入一个节点到集群

  1. Usage:  docker swarm join [OPTIONS] HOST:PORT
  2.  
  3. Join a swarm as a node and/or manager
  4.  
  5. Options:
  6.       –advertise-addr value   Advertised address (format: <ip|interface>[:port])
  7.       –help                   Print usage
  8.       –listen-addr value      Listen address (format: <ip|interface>[:port)
  9.       –token string           Token for entry into the swarm

docker swarm join用来加入一个节点到一个集群。节点加入为一个manager节点或worker节点取决于使用–token参数传递过去的token。如果传递一个manager token,这个节点以管理节点加入。如果传递一个worker token,就以worker节点加入。

以manager身份添加节点到集群

下面的示例演示使用manager token添加管理节点到集群。

  1. $ docker swarm join –token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 192.168.99.121:2377
  2. This node joined a swarm as a manager.
  3. $ docker node ls
  4. ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  5. dkp8vy1dq1kxleu9g4u78tlag *  manager2  Ready   Active        Reachable
  6. dvfxp4zseq4s0rih1selh0d20    manager1  Ready   Active        Leader

一个集群应该最多只能有3-7个管理节点。不参与管理仲裁的节点应该以worker身份加入。manager节点应该是稳定的主机且有静态IP地址。

以worker身份加入集群

下面的示例演示使用worker token添加worker节点到集群。

  1. $ docker swarm join –token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx 192.168.99.121:2377
  2. This node joined a swarm as a worker.
  3. $ docker node ls
  4. ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  5. 7ln70fl22uw2dvjn2ft53m3q5    worker2   Ready   Active
  6. dkp8vy1dq1kxleu9g4u78tlag    worker1   Ready   Active        Reachable
  7. dvfxp4zseq4s0rih1selh0d20 *  manager1  Ready   Active        Leader

–listen-addr value

如果节点为manager,在这个地址监听集群管理相关流量。默认是监听0.0.0.0:2377。也可以指定一个网络接口来监听这个接口的地址。例如–listen-addr eth0:2377。

端口是可选的。如果仅指定IP地址或接口名称,端口就使用默认的2377。

当加入的是一个已存在的集群时,这个参数一般不需要指定。

–advertise-addr value

指定通告给集群的节点的地址,这个地址用来给其它节点访问API和overlay网络通信。如果没有指定地址,docker将检查系统是否只有一个IP地址,如果是将使用这个地址并使用监听的端口(查看–listen-addr)。如果系统有多个IP地址,–advertise-addr就必须指定一个以便内部管理节点能够正常通信和overlay网络通信。

也可以指定一个网络接口来通告接口的地址,例如–advertise-addr eth0:2377。

端口是可选的。如果仅指定一个IP地址或接口名称,就使用端口2377。

当加入的是一个已存在的集群时,这个参数一般不需要指定。

–token string

节点加入集群所需的密钥

Docker命令行参考(33) – docker swarm init初始化集群

  1. Usage:  docker swarm init [OPTIONS]
  2.  
  3. Initialize a swarm
  4.  
  5. Options:
  6.       –advertise-addr value            Advertised address (format: <ip|interface>[:port])
  7.       –cert-expiry duration            Validity period for node certificates (default 2160h0m0s)
  8.       –dispatcher-heartbeat duration   Dispatcher heartbeat period (default 5s)
  9.       –external-ca value               Specifications of one or more certificate signing endpoints
  10.       –force-new-cluster               Force create a new cluster from current state.
  11.       –help                            Print usage
  12.       –listen-addr value               Listen address (format: <ip|interface>[:port])
  13.       –task-history-limit int          Task history retention limit (default 5)

初始化一个集群。docker engine收到并执行这个命令所在的主机将成为新创建的单节点集群的管理节点。

  1. $ docker swarm init –advertise-addr 192.168.99.121
  2. Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager.
  3.  
  4. To add a worker to this swarm, run the following command:
  5.  
  6.     docker swarm join
  7.     –token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx
  8.     172.17.0.2:2377
  9.  
  10. To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.

docker swarm init生成两个随机的tokens,一个worker token和一个manager token。当一个节点加入到这个集群时,是worker节点还是manager节点取决于传递给swarm joing的token。

当创建集群后,可以使用swarm join-token来显示或轮换token。

–cert-expiry

设置节点证书有效期

–dispatcher-heartbeat

设置节点报告它们的健康状态间隔的时间。

–external-ca value

设置集群使用一个外部CA来签发节点证书。value的格式为protocol=X,url=Y。protocol指定的是发送签名请求到外部CA所使用的协议。目前只支持cfssl。URL指定的是签名请求应该提交到哪个endpoint。

–force-new-cluster

强制一个失去仲裁能力的集群的其中一个节点重启成为一单节点集群,而不丢失数据。

–listen-addr value

在这个地址监听集群管理相关流量。默认是监听0.0.0.0:2377。也可以指定一个网络接口来监听这个接口的地址。例如–listen-addr eth0:2377。

端口是可选的。如果仅指定IP地址或接口名称,端口就使用默认的2377。

–advertise-addr value

指定通告给集群的节点的地址,这个地址用来给其它节点访问API和overlay网络通信。如果没有指定地址,docker将检查系统是否只有一个IP地址,如果是将使用这个地址并使用监听的端口(查看–listen-addr)。如果系统有多个IP地址,–advertise-addr就必须指定一个以便内部管理节点能够正常通信和overlay网络通信。

也可以指定一个网络接口来通告接口的地址,例如–advertise-addr eth0:2377。

端口是可选的。如果仅指定一个IP地址或接口名称,就使用端口2377。

–task-history-limit

设置任务历史记录保留限制。

Docker命令行参考(32) – docker volume create创建数据卷

  1. Usage:  docker volume create [OPTIONS]
  2.  
  3. Create a volume
  4.  
  5. Options:
  6.   -d, –driver string   Specify volume driver name (default "local")
  7.       –help            Print usage
  8.       –label value     Set metadata for a volume (default [])
  9.       –name string     Specify volume name
  10.   -o, –opt value       Set driver specific options (default map[])

创建一个新的数据卷,这样容器就可以往里面存储数据了。如果–name没有指定,docker就生成一个随机的名称。创建一个数据卷之后就可以配置容器使用它了,例如:

  1. $ docker volume create –name hello
  2. hello
  3.  
  4. $ docker run -d -v hello:/world busybox ls /world

数据卷hello挂载在容器的/world目录。docker不支持容器内的挂载点使用相对路径。

多个容器可以在相同时间段使用相同的数据卷。如果两个容器需要访问共享数据这个功能会非常有用。例如,一个容器写入数据另一个读取这个数据。

数据卷名称必须在所有驱动之间是唯一的。意味着在两个不同的驱动之间不能使用相同的数据卷名。如果尝试使用,docker将返回一个错误:

  1. A volume named  "hello"  already exists with the "some-other" driver. Choose a different volume name.

驱动特定的选项

一些数据卷驱动提供了一些选项来自定义数据卷的创建。使用-o或–opt标志传递这个驱动选项:

  1. $ docker volume create –driver fake –opt tardis=blue –opt timey=wimey

这些选项直接传递到数据卷驱动。内置的local Linux驱动接受的选项与linux mount命令类似。通过传递多次–opt标志来提供多个选项。完整的可用的mount选项在这里

例如,下面创建了一个tmpfs数据卷,称为foo,大小为100M,uid为1000.

  1. $ docker volume create –driver local –opt type=tmpfs –opt device=tmpfs –opt o=size=100m,uid=1000 –name foo

使用btrfs的另一个示例:

  1. $ docker volume create –driver local –opt type=btrfs –opt device=/dev/sda2 –name foo

使用nfs从192.168.1.1挂载到/path/to/dir,模式为rw的示例:

  1. $ docker volume create –driver local –opt type=nfs –opt o=addr=192.168.1.1,rw –opt device=:/path/to/dir –name foo

Docker命令行参考(31) – docker network ls列出网络

  1. Usage:  docker network ls [OPTIONS]
  2.  
  3. List networks
  4.  
  5. Aliases:
  6.   ls, list
  7.  
  8. Options:
  9.   -f, –filter value   Provide filter values (i.e. ‘dangling=true’) (default [])
  10.       –help           Print usage
  11.       –no-trunc       Do not truncate the output
  12.   -q, –quiet          Only display network IDs

列出Engine daemon知道的所有网络。这包括跨集群中多个主机的网络,例如:

  1. $ sudo docker network ls
  2.     NETWORK ID          NAME                DRIVER
  3.     7fca4eb8c647        bridge              bridge
  4.     9f904ee27bf5        none                null
  5.     cf03ee007fb4        host                host
  6.     78b03ee04fc4        multi-host          overlay

使用–no-trunc选项显示完整的网络id:

  1. docker network ls –no-trunc
  2. NETWORK ID                                                         NAME                DRIVER
  3. 18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3   none                null
  4. c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47   host                host
  5. 7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185   bridge              bridge
  6. 95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd   foo                 bridge
  7. 63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161   dev                 bridge

过滤

过滤标志(-f或–filter)格式是key=value。如果超过一个过滤,那么传递多个标志(如 –filter “foo=bar” –filter “bif=baz”)。多个过滤标志作为一个OR过滤连接。例如-f type=custom -f type=builtin返回custom和builtin网络。
目前支持的过滤有:

  • driver
  • id (网络id)
  • label (label= 或 label==)
  • name (网络名称)
  • type (custom builtin)
  • Driver

    driver过滤器基于它们的驱动匹配网络。
    下面的示例匹配使用bridge驱动的网络:

    1. $ docker network ls –filter driver=bridge
    2. NETWORK ID          NAME                DRIVER
    3. db9db329f835        test1               bridge
    4. f6e212da9dfd        test2               bridge

    ID

    id过滤器基于完整或部分网络ID匹配网络。
    下面的示例是过滤出包含ID 63d1ff1f77b0…字符串的网络。

    1. $ docker network ls –filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161
    2. NETWORK ID          NAME                DRIVER
    3. 63d1ff1f77b0        dev                 bridge

    也可以使用ID的部分字符来匹配:

    1. $ docker network ls –filter id=95e74588f40d
    2. NETWORK ID          NAME                DRIVER
    3. 95e74588f40d        foo                 bridge
    4.  
    5. $ docker network ls –filter id=95e
    6. NETWORK ID          NAME                DRIVER
    7. 95e74588f40d        foo                 bridge

    Label

    label过滤器基于label的存在或label和其值来匹配网络。
    下面的示例过滤出有一个usage label而不管它是什么值的所有网络。

    1. $ docker network ls -f "label=usage"
    2. NETWORK ID          NAME                DRIVER
    3. db9db329f835        test1               bridge
    4. f6e212da9dfd        test2               bridge

    下面过滤出存在usage label且值为prod的网络。

    1. $ docker network ls -f "label=usage=prod"
    2. NETWORK ID          NAME                DRIVER
    3. f6e212da9dfd        test2               bridge

    Name

    name过滤器基于网络名称的全部或部分匹配网络。
    下面示例过滤出网络名称包含foobar字符中的所有网络。

    1. $ docker network ls –filter name=foobar
    2. NETWORK ID          NAME                DRIVER
    3. 06e7eef0a170        foobar              bridge

    也可以指定名称的部分匹配:

    1. $ docker network ls –filter name=foo
    2. NETWORK ID          NAME                DRIVER
    3. 95e74588f40d        foo                 bridge
    4. 06e7eef0a170        foobar              bridge

    Type

    type过滤器支持两个值;builtin显示预定义的网络(bridge,none,host),costom显示用户定义的网络。
    下面示例过滤出所有用户定义的网络:

    1. $ docker network ls –filter type=custom
    2. NETWORK ID          NAME                DRIVER
    3. 95e74588f40d        foo                 bridge
    4. 63d1ff1f77b0        dev                 bridge

    通过这个命令可以清理网络。例如,使用这个过滤可以删除所有的用户定义的网络:

    1. $ docker network rm `docker network ls –filter type=custom -q`

    当尝试删除仍然有容器连接到的网络时将出现一个waring。

    Docker命令行参考(30) – docker network inspect显示详细的网络信息

    1. Usage:  docker network inspect [OPTIONS] NETWORK [NETWORK…]
    2.  
    3. Display detailed information on one or more networks
    4.  
    5. Options:
    6.   -f, –format string   Format the output using the given go template
    7.       –help            Print usage

    返回一个或多个网络的信息。默认下,这个命令以JSON格式输出网络信息。例如,连接两个容器到默认的bridge网络:

    1. $ sudo docker run -itd –name=container1 busybox
    2. f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27
    3.  
    4. $ sudo docker run -itd –name=container2 busybox
    5. bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727

    docker network inspect命令在其输出结果中包含容器ID。对于由多主机网络驱动程序支持的网络(如Overlay),此命令还会显示集群中其他主机上的容器endpoints。这些endpoints在输出中表示为“ep-{endpoint-id}”。 但是,对于群集范围的网络,仅显示该节点本地的endpoints。

    1. $ sudo docker network inspect bridge
    2. [
    3.     {
    4.         "Name": "bridge",
    5.         "Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f",
    6.         "Scope": "local",
    7.         "Driver": "bridge",
    8.         "IPAM": {
    9.             "Driver": "default",
    10.             "Config": [
    11.                 {
    12.                     "Subnet": "172.17.42.1/16",
    13.                     "Gateway": "172.17.42.1"
    14.                 }
    15.             ]
    16.         },
    17.         "Internal": false,
    18.         "Containers": {
    19.             "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": {
    20.                 "Name": "container2",
    21.                 "EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019",
    22.                 "MacAddress": "02:42:ac:11:00:02",
    23.                 "IPv4Address": "172.17.0.2/16",
    24.                 "IPv6Address": ""
    25.             },
    26.             "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": {
    27.                 "Name": "container1",
    28.                 "EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad",
    29.                 "MacAddress": "02:42:ac:11:00:01",
    30.                 "IPv4Address": "172.17.0.1/16",
    31.                 "IPv6Address": ""
    32.             }
    33.         },
    34.         "Options": {
    35.             "com.docker.network.bridge.default_bridge": "true",
    36.             "com.docker.network.bridge.enable_icc": "true",
    37.             "com.docker.network.bridge.enable_ip_masquerade": "true",
    38.             "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
    39.             "com.docker.network.bridge.name": "docker0",
    40.             "com.docker.network.driver.mtu": "1500"
    41.         }
    42.     }
    43. ]

    返回关于用户定义网络的信息:

    1. $ docker network create simple-network
    2. 69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a
    3. $ docker network inspect simple-network
    4. [
    5.     {
    6.         "Name": "simple-network",
    7.         "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a",
    8.         "Scope": "local",
    9.         "Driver": "bridge",
    10.         "IPAM": {
    11.             "Driver": "default",
    12.             "Config": [
    13.                 {
    14.                     "Subnet": "172.22.0.0/16",
    15.                     "Gateway": "172.22.0.1/16"
    16.                 }
    17.             ]
    18.         },
    19.         "Containers": {},
    20.         "Options": {}
    21.     }
    22. ]

    Docker命令行参考(29) – docker network create创建一个网络

    1. Usage:  docker network create [OPTIONS] NETWORK
    2.  
    3. Create a network
    4.  
    5. Options:
    6.       –aux-address value    Auxiliary IPv4 or IPv6 addresses used by Network
    7.                              driver (default map[])
    8.   -d, –driver string        Driver to manage the Network (default "bridge")
    9.       –gateway value        IPv4 or IPv6 Gateway for the master subnet (default [])
    10.       –help                 Print usage
    11.       –internal             Restrict external access to the network
    12.       –ip-range value       Allocate container ip from a sub-range (default [])
    13.       –ipam-driver string   IP Address Management Driver (default "default")
    14.       –ipam-opt value       Set IPAM driver specific options (default map[])
    15.       –ipv6                 Enable IPv6 networking
    16.       –label value          Set metadata on a network (default [])
    17.   -o, –opt value            Set driver specific options (default map[])
    18.       –subnet value         Subnet in CIDR format that represents a
    19.                              network segment (default [])

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

    1. $ 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网络的配置前提条件,只需要在集群中的任何一台主机执行创建网络命令:

    1. $ docker network create -d overlay my-multihost-network

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

    连接容器

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

    1. $ docker run -itd –network=mynet busybox

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

    指定高级选项

    当创建一个网络时,Engine默认为这个网络创建一个不重叠的子网。这个子网不是现有网络的细分。 它纯粹是为了寻址目的。可以直接使用–subnet选项来覆盖这个默认行为并指定一个子网。在一个bridge网络上创建一个单独的子网:

    1. $ docker network create –driver=bridge –subnet=192.168.0.0/16 br0

    除此之外,可以指定–gateway –ip-range和–aux-address选项。

    1. $ docker network create
    2.   –driver=bridge
    3.   –subnet=172.28.0.0/16
    4.   –ip-range=172.28.5.0/24
    5.   –gateway=172.28.5.254
    6.   br0

    如果没有指定–gateway,那么Engine将从首选的ip池中为你选择一个gateway。对于overlay网络和及类似功能的网络驱动,可以创建多个子网。

    1. $ docker network create -d overlay
    2.   –subnet=192.168.0.0/16
    3.   –subnet=192.170.0.0/16
    4.   –gateway=192.168.0.100
    5.   –gateway=192.170.0.100
    6.   –ip-range=192.168.1.0/24
    7.   –aux-address="my-router=192.168.1.5" –aux-address="my-switch=192.168.1.6"
    8.   –aux-address="my-printer=192.170.1.5" –aux-address="my-nas=192.170.1.6"
    9.   my-multihost-network

    要确保子网没有重叠。如果重叠了,网络创建将失败,然后Engine返回一个错误。

    bridge驱动选项

    当创建一个自定义的网络时,默认的网络驱动(如bridge)可以传递额外的选项。下面是这些选项且有与docker daemon选项等同的选项:

    选项 等同 描述
    com.docker.network.bridge.name 创建Linux bridge使用的bridge名称
    com.docker.network.bridge.enable_ip_masquerade –ip-masq 启用IP伪装
    com.docker.network.bridge.enable_icc –icc 启用或禁用容器间连接
    com.docker.network.bridge.host_binding_ipv4 –ip 绑定容器端口时默认绑定的IP
    com.docker.network.driver.mtu –mtu 设置容器网络MTU

    下面这些参数可以传递给docker network create,可以用于任何网络驱动。

    参数 等同 描述
    –gateway 主子网的IPv4或IPv6网关
    –ip-range –fixed-cidr 从一个IP范围分配IP
    –internal 限制外网网络连接到这个网络
    –ipv6 –ipv6 启用Ipv6网络
    –subnet –bip 子网

    例如,使用-o或–opt选项当发布端口时绑定的IP地址:

    1. $ docker network create
    2.     -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1"
    3.     simple-network

    网络内部模式

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

    Docker命令行参考(28) – docker network connect连接容器到一个网络

    1. Usage:  docker network connect [OPTIONS] NETWORK CONTAINER
    2.  
    3. Connect a container to a network
    4.  
    5. Options:
    6.       –alias value           Add network-scoped alias for the container (default [])
    7.       –help                  Print usage
    8.       –ip string             IP Address
    9.       –ip6 string            IPv6 Address
    10.       –link value            Add link to another container (default [])
    11.       –link-local-ip value   Add a link-local address for the container (default [])

    这个命令用来连接一个容器到一个网络。可以通过名称或ID来连接容器。一旦连接成功,这个容器就能够与在同一网络的其它容器通信。

    1. $ docker network connect multi-host-network container1

    也可以使用docker run –network=命令启动一个容器并立即连接它到一个网络。

    1. $ docker run -itd –network=multi-host-network busybox

    可以指定你想分配到这个容器接口的IP地址。

    1. $ docker network connect –ip 10.10.36.122 multi-host-network container2

    可以使用–link选项来指定一个首选别名来连接到另一个容器。

    1. $ docker network connect –link container1:c1 multi-host-network container2

    –alias选项用来指定一个可以在将要连接的网络使用的别名。

    1. $ docker network connect –alias db –alias mysql multi-host-network container2

    可以暂停,重启和停止那么已连接到一个网络的容器。当容器运行时将立即连接到它所配置的网络。
    如果指定了容器IP,当重新启动已停止的容器时将重新应用这个IP。如果Ip地址不可用,容器将启动失败。保证这个IP一直可用的一个方法是在创建网络时指定一个–ip-range,然后从这个IP范围外选择一个静态IP地址。这样就确保了当容器不在这个网络时(容器停止时)这个IP地址不会分配给其它容器。

    1. $ docker network create –subnet 172.20.0.0/16 –ip-range 172.20.240.0/20 multi-host-network
    1. $ docker network connect –ip 172.20.128.2 multi-host-network container2

    要验证这个容器是否已连接到网络,使用docker network inspect命令。使用docker network disconnect来从网络删除容器。

    Docker命令行参考(27) – docker update更新容器配置

    1. Usage:  docker update [OPTIONS] CONTAINER [CONTAINER…]
    2.  
    3. Update configuration of one or more containers
    4.  
    5. Options:
    6.       –blkio-weight value          Block IO (relative weight), between 10 and 1000
    7.       –cpu-period int              Limit CPU CFS (Completely Fair Scheduler) period
    8.       –cpu-quota int               Limit CPU CFS (Completely Fair Scheduler) quota
    9.   -c, –cpu-shares int              CPU shares (relative weight)
    10.       –cpuset-cpus string          CPUs in which to allow execution (0-3, 0,1)
    11.       –cpuset-mems string          MEMs in which to allow execution (0-3, 0,1)
    12.       –help                        Print usage
    13.       –kernel-memory string        Kernel memory limit
    14.   -m, –memory string               Memory limit
    15.       –memory-reservation string   Memory soft limit
    16.       –memory-swap string          Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
    17.       –restart string              Restart policy to apply when a container exits

    docker update命令可以动态地更新容器配置。可以使用这个命令限制容器在docker主机上使用太多的资源。可以在命令后台加一个或多个容器来批量更新配置。多个容器名称或ID之间使用空格分隔。
    除了–kernel-memory选项,其它的选项可以应用在运行或停止的容器。–kernel-memory只可以应用在已停止的容器。当在已停止的容器运行docker update命令时,更新的配置将在下一次重启容器时生效。
    另一个可以更新的命令是restart策略,当执行docker update之后,新的restart策略将立即生效。

    示例

    更新一个容器为cpu-shares=512

    1. $ docker update –cpu-shares 512 abebf7571666

    更新容器的cpu-shares和memory

    1. $ docker update –cpu-shares 512 -m 300M abebf7571666 hopeful_morse

    更新容器restart策略

    1. $ docker update –restart=on-failure:3 abebf7571666 hopeful_morse

    Docker命令行参考(26) – docker stats实时显示容器资源使用统计

    1. Usage:  docker stats [OPTIONS] [CONTAINER…]
    2.  
    3. Display a live stream of container(s) resource usage statistics
    4.  
    5. Options:
    6.   -a, –all         Show all containers (default shows just running)
    7.       –help        Print usage
    8.       –no-stream   Disable streaming stats and only pull the first result

    docker stats命令返回运行中的容器的实时数据流。要限制显示一个或多个指定的容器,以空格分隔指定容器名称或ID列表。可以指定一个已停止的容器,不过不会返回任何数据。
    如果想要更多详细的关于容器资源使用的信息。使用/containers/(id)/stats API endpoint。

    示例

    运行docker stats查看所有运行中的容器资源使用情况

    1. $ docker stats
    2. CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
    3. 1285939c1fd3        0.07%               796 KiB / 64 MiB        1.21%               788 B / 648 B       3.568 MB / 512 KB
    4. 9c76f7834ae2        0.07%               2.746 MiB / 64 MiB      4.29%               1.266 KB / 648 B    12.4 MB / 0 B
    5. d1ea048f04e4        0.03%               4.583 MiB / 64 MiB      6.30%               2.854 KB / 648 B    27.7 MB / 0 B

    查看多个容器资源使用

    1. $ docker stats fervent_panini 5acfcb1b4fd1
    2. CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
    3. 5acfcb1b4fd1        0.00%               115.2 MiB/1.045 GiB   11.03%              1.422 kB/648 B
    4. fervent_panini      0.02%               11.08 MiB/1.045 GiB   1.06%               648 B/648 B