• 如何创建docker network?
    • Swarm中已有的network
    • 使用docker命令创建网络
    • 自定义网络

    如何创建docker network?

    容器的跨主机网络访问是docker容器集群的基础,我们之前使用的Shrike实现二层网络,能够使不同主机中的容器和主机的网络互联互通,使容器看上去就像是虚拟机一样,这样做的好处是可以不变动已有的服务,将原有的应用直接封装成一个image启动即可,但这也无法利用上docker1.12+后的service、stack等服务编排、负载均衡、服务发现等功能。我们在此讨论容器的网络模式,暂且忽略自定义网络,会在后面单独谈论它。

    Swarm中已有的network

    安装好docker并启动swarm集群后,会在集群的每个node中找到如下network:

    NETWORK ID NAME DRIVER SCOPE
    b1d5859a9439 bridge bridge local
    262ec8634832 docker_gwbridge bridge local
    19c11140a610 host host local
    tx49ev228p5l ingress overlay swarm
    c7d82cbc5a33 mynet bridge local
    e1a59cb1dc34 none null local

    (注)mynet是我们自定义的本地网络,我们暂时不用它,因为我们是以swarm集群模式使用docker,暂时不考虑本地网络;docker_gwbridge作为docker gateway网络,功能比较特殊,负责service的负载均衡和服务发现。

    有两种方式来创建docker network:

    • 使用docker network create命令来创建,只能创建docker内建的网络模式
    • 使用docker plugin,创建自定义网络

    使用docker命令创建网络

    Docker中内置的网络模式包括如下几种:

    • bridge 我们基于该网络模式创建了mynet网络
    • host 本地网络模式
    • macvlan 这个模式貌似是最新加的
    • null 无网络
    • overlay 用于swarm集群中容器的跨主机网络访问

    docker create network命令包含以下参数:

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

    创建overlay模式的全局网络,我们可以看到新创建的mynet1的scope是swarm,即集群范围可见的。

    1. 172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network create -d overlay mynet1
    2. x81fu4ohqot2ufbpoa2u8vyx3
    3. 172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network ls
    4. NETWORK ID NAME DRIVER SCOPE
    5. ad3023f6d324 bridge bridge local
    6. 346c0fe30055 crane_default bridge local
    7. 4da289d8e48a docker_gwbridge bridge local
    8. 3d636dff00da host host local
    9. tx49ev228p5l ingress overlay swarm
    10. x81fu4ohqot2 mynet1 overlay swarm
    11. cc14ee093707 none null local
    12. 172.18.0.1:root@sz-pg-oam-docker-test-001:/root]# docker network inspect mynet1
    13. [
    14. {
    15. "Name": "mynet1",
    16. "Id": "x81fu4ohqot2ufbpoa2u8vyx3",
    17. "Created": "0001-01-01T00:00:00Z",
    18. "Scope": "swarm",
    19. "Driver": "overlay",
    20. "EnableIPv6": false,
    21. "IPAM": {
    22. "Driver": "default",
    23. "Options": null,
    24. "Config": []
    25. },
    26. "Internal": false,
    27. "Attachable": false,
    28. "Containers": null,
    29. "Options": {
    30. "com.docker.network.driver.overlay.vxlanid_list": "4097"
    31. },
    32. "Labels": null
    33. }
    34. ]

    注意,overlay模式的网络只能在swarm的manager节点上创建,如果在work节点上创建overlay网络会报错:

    1. 172.18.0.1:root@sz-pg-oam-docker-test-002:/root]# docker network create -d overlay mynet1
    2. Error response from daemon: Cannot create a multi-host network from a worker node. Please create the network from a manager node.

    如果不使用-d指定driver将默认创建本地bridge网络。

    自定义网络

    创建自定义网络需要设置网络的driver和ipam。

    TDB

    创建网络需要满足的需求

    写一个创建自定义网络的例子

    一步步教你创建一个自定义网络