3

使用Compose变量定制Docker网络

 2 years ago
source link: https://www.open-open.com/lib/view/open1451606865542.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用Compose变量定制Docker网络

jopen 6年前发布 | 16K 次阅读 Docker

使用[Docker 多节点网络]来创建虚拟网络,把容器接入虚拟网络,能实现应用中所需要的网络拓扑。具体来说,Bridge网络能用来创建单节点网络,Overlay网络能创建多节点网络。通过这样给应用定制专用网络,能为容器提供绝对的隔离性。

Docker Compose的目标是实现单节点网络,通过用<code>--x-networking</code> 来创建一个应用程序独有的桥接网络,如果应用程序需要多节点部署,可以使用Docker Swarm集群来创建一个overlay网络。

那如果一个桥接网络或overlay网络已经存在,而你想要把这个网络分配给运行中的容器呢?

2c0f9a6fdff673eaa106c6536a4d52e6.png

Docker 1.9 引入了变量替换的特性,我们可以利用这特性实现把容器关联到一个预创建的网络上。

创建Docker桥接网络

1. 创建网络:

  sh
  docker network create -d bridge mynet
  47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b=

2. 列出网络:

  sh
  docker network ls
  NETWORK ID          NAME                DRIVER
  feb6e9567439        bridge              bridge             
  29563a59abe8        none                null               
  25ab737cd665        host                host               
  47d6225ffe56        mynet               bridge

Docker会为每个节点自动创建三个网络:
| 网络名称 | 作用  |
| :-------- | :-- |
| bridge |  容器默认连接的网络,是所有Docker安装时都默认安装的docker0网络   |
| none     |   容器定制的网络栈 |
| host     |   在宿主网络栈上添加一个容器,容器中的网络配置会与宿主的一样|

上边看到,我刚创建的mynet网络也在列表中。

    使用<code>docker inspect</code>命令查看mynet网络的详细信息:

    json
    [
        {
            "Name": "mynet",
            "Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b",
            "Scope": "local",
            "Driver": "bridge",
            "IPAM": {
                "Driver": "default",
                "Config": [
                    {}
                ]
            },
            "Containers": {},
            "Options": {}
        }
    ]

从Containers这节可以看到,目前还没有容器关联上去。

Docker Compose 与 网络

1. 上面新建的网络能在新的容器中使用,只要在运行时使用<code>docker run --net=<NETWORK></code>命令。不过本文会用Compose文件实现:

  json
  mycouchbase:
    container_name: "db"
    image: couchbase/server
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 11210:11210
    net: ${NETWORK}
  mywildfly:
    image: arungupta/wildfly-admin
    environment:
      - COUCHBASE_URI=db
    ports:
      - 8080:8080
      - 9990:9990
   net: ${NETWORK}

 注意这里<code>net</code>已经指定使用一个自定义网络。

2. 使用新创建的网络来启动应用:

  sh
  NETWORK=mynet docker-compose up -d

再查看网络详细信息:

  json

docker network inspect mynet
  [
      {
          "Name": "mynet",             
          "Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b",           
          "Scope": "local",             
          "Driver": "bridge",            
          "IPAM": {                    
              "Driver": "default",              
              "Config": [            
                  {}              
              ]               
          },        
          "Containers": {         
              "300bebe6c3e0350ebf9b9d3746eb3a7b49444e14c00314770627a9f101442639": {         
                  "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f",          
                  "MacAddress": "02:42:ac:14:00:03",           
                  "IPv4Address": "172.20.0.3/16",             
                  "IPv6Address": ""           
              },          
              "4fdae4eb919f0934422513227fe541255557dd9e8b3317374685927e7f427249": {           
                  "EndpointID": "937605d716d144b55288d70817d611da5fb0f87e3aedd6b5074fca07f82c3953",          
                  "MacAddress": "02:42:ac:14:00:02",           
                  "IPv4Address": "172.20.0.2/16",             
                  "IPv6Address": ""           
              }         
          },           
          "Options": {}            
      }           
  ]   

可以看到现在已经有两个容器关联到这个网络上了。

使用<code>docker ps</code>查看容器ID:

 sh          
 # docker ps                      
 CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                                                                               NAMES
 300bebe6c3e0        couchbase/server          "/entrypoint.sh couch"   2 minutes ago       Up 2 minutes        0.0.0.0:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18092/tcp   db
 4fdae4eb919f        arungupta/wildfly-admin   "/opt/jboss/wildfly/b"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp                                                      wildflycouchbasejavaee7network_mywildfly_1

查看其中一个容器的网络设置:      

sh      
 docker inspect -f '{{ .HostConfig.NetworkMode }}' 300          
 mynet         

查看这个容器的详细网络信息:              

 sh            
 docker inspect -f '{{ .NetworkSettings.Networks.mynet }}' 300                 
 {82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f 172.20.0.1 172.20.0.3 16   0          02:42:ac:14:00:03}              

这个容器的更多细节能用<code>docker inspect</code>看到,相关的部分在这里:

 json
 "Networks": {
     "mynet": {
         "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f",
         "Gateway": "172.20.0.1",
         "IPAddress": "172.20.0.3",
         "IPPrefixLen": 16,
         "IPv6Gateway": "",
         "GlobalIPv6Address": "",
         "GlobalIPv6PrefixLen": 0,
         "MacAddress": "02:42:ac:14:00:03"
     }
 }

创建新的Docker Overlay网络

创建Overlay网络需要预先搭建好一个键值对服务和一个Docker Swarm集群。

如了解更多docker相关知识,请观看培训视频:https://csphere.cn/training

如需要docker相关产品,请访问希云官网首页:https://csphere.cn

来自: http://my.oschina.net/kernalsky/blog/550990

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK