docker网络管理命令

docker网络管理命令如下:
  • docker network create
  • docker network connect
  • docker network ls
  • docker network rm
  • docker network disconnect
  • docker network inspect

创建网络:

默认创建的是bridge网络:

[root@docker01 ~]# docker network create simple-network
b3e3c58a844e486644e0bd44a67fc983532a36e854208e8256cbb0e164f50480
[root@docker01 ~]# docker network inspect simple-network
[
    {
        "Name": "simple-network",
        "Id":
"b3e3c58a844e486644e0bd44a67fc983532a36e854208e8256cbb0e164f50480",
        "Created": "2018-01-04T16:53:21.071813651+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

不像bridge网络,直接可以创建。创建overlay网络需要一些条件:

  • 访问到一个键值存储。支持Consul,Etcd,ZooKeeper分布式键值存储
  • 与键值存储连接的主机集群。
  • 在swarm群集中的每个主机上正确配置了引擎的daemon。

支持overlay网络的docker选项:

  • ­­cluster­store
  • ­­cluster­store­opt
  • ­­cluster­advertise

当你创建了一个网络,默认会创建一个不重叠的子网,使用--subnet选项可以直接指定子
网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。
除了--subnet,还可以指定:--gateway,--ip-range,--aux-address选项。

docker网络管理命令_第1张图片
1.png

要确保子网不会重叠,否则,网络会创建失败并返回错误。
创建自定义网络时,可以向驱动程序传递附加选项,bridge驱动接受以下选项:


docker网络管理命令_第2张图片
2.png

例如:

[root@docker01 ~]# docker network create -o
"com.docker.network.bridge.host_binding_ipv4"="192.168.0.133" my-network
1e4f2931c9352a19127eb323b717c16c87187f0221f466b24892b1576174432c
[root@docker01 ~]# docker network inspect my-network
[
    {
        "Name": "my-network",
        "Id":
"1e4f2931c9352a19127eb323b717c16c87187f0221f466b24892b1576174432c",
        "Created": "2018-01-04T17:33:08.658600787+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.host_binding_ipv4": "192.168.0.133"
        },
        "Labels": {}
    }
]

启动一个容器并发布端口:可以看到绑定的地址


3.png

连接容器

可以连接已存在的容器到一个或者多个网络中。一个容器可以连接到多个不同网络驱动的网络中。
当连接一旦建立,容器便可以和其他的容器通讯,通过IP或者容器名称。
对于支持多主机连接的overlay网络或者自定义插件,连接到同一个多主机网络的不同主机上的容器,也可以用这种方式通信。

基本容器网络示例:
1、首先,创建和运行两个容器:container1和container2


4.png

2、创建一个用户自定义网络 isolated_nw,是bridge网络

root@docker01 ~]# docker network create ­d bridge ­­subnet
172.25.0.0/16 ­­gateway 172.25.0.1 isolated_nw
59474e3fd39230f8998b2fbc7d6b7b488f6f9df0e56f6ae8f79c3c2c34ee1931

3、连接continer2容器到这个新创建的网络,并inspect这个网络,检查网络的连接

[root@docker01 ~]# docker network connect isolated_nw continer2
[root@docker01 ~]# docker network inspect isolated_nw
[
    {
        "Name": "isolated_nw",
        "Id":
"59474e3fd39230f8998b2fbc7d6b7b488f6f9df0e56f6ae8f79c3c2c34ee1931",
        "Created": "2018-01-05T09:06:18.420782438+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.25.0.0/16",
                    "Gateway": "172.25.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
           
"3243b2b7cb47fa1820582b3a9c44a4b20c4c11646facadff8ba6c70fcc876294": {
                "Name": "continer2",
                "EndpointID":
"9cb56361727e22f16177a7246196d9a33e3bc9642b403b8c254cc2d1aac9bd53",
                "MacAddress": "02:42:ac:19:00:02",
                "IPv4Address": "172.25.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

[root@docker01 ~]#

4、创建容器continer3,并分配一个固定IP172.25.3.3

[root@docker01 ~]# docker run -itd --name continer3 --network isolated_nw --
ip=172.25.3.3 centos7:new002 /bin/bash
f71f8258f80f380287a29f2ecc45fd995f6a4f424cbdcefd7dbb5252d48beadd

使用--ip和--ip6参数指定的IP地址,如果是用户定义的网络,在容器重启的时候,会保持有效,如果不是用户定义的网络,分配的IP地址是不会保持有效的。

5、检查continer3的网络资源:

[root@docker01 ~]# docker inspect --format=''  continer3
docker网络管理命令_第3张图片
5.png

6、检查continer2容器的网络资源:

[root@docker01 ~]# docker inspect --format=''  continer2 | python -m json.tool
docker网络管理命令_第4张图片
6.png

现在continer2属于两个网络:

docker网络管理命令_第5张图片
7.png

7、进入容器continer2,并尝试和continer3及continer1通信


docker网络管理命令_第6张图片
8.png

有两个IP,网关是连接到的第一个网络的网关
docker内嵌了DNS服务,意思是链接到同一个网络的容器,可以使用容器名进行通信。


docker网络管理命令_第7张图片
9.png

默认的bridge网络是不可以使用名称通信的,IP可以
docker网络管理命令_第8张图片
10.png

如果想让默认网络中,也可以使用容器名进行通信呢?

使用link的特性。这是唯一推荐使用link的场景。应该使用自定义的网络来替代它的。

在默认网络中使用link增加了一下特性:

  • 解析容器名到IP地址
  • 定义网络别名
    • --link=CONTAINER-NAME:ALIAS
  • 增强网络连接的安全性
  • 环境变量注入
    例如:
[root@docker01 ~]# docker run -itd --name container4 --link container1:c1
centos7:new002  /bin/bash
docker网络管理命令_第9张图片
11.png

取消连接:

[root@docker01 ~]# docker network disconnect isolated_nw continer2
[root@docker01 ~]# docker network disconnect isolated_nw continer3

删除网络:


docker网络管理命令_第10张图片
13.png

你可能感兴趣的:(docker网络管理命令)