閱讀924 返回首頁    go 小米 go 小米5


Docker基礎之八: 容器的網絡

容器的網絡

對Docker感興趣的朋友可以加我的微信ghostcloud2016,然後我把你加到我們的一個Docker愛好者群組裏麵。

根據之前的教程我們隻是運行了簡單的應用程序。之前我們編譯了自己的image,在本節中我們將講述如何管理容器的網絡。

1 容器命名

如果你仔細查看docker ps的輸出,你會看到docker自動生成了容器的名稱:

root@gctest:~/.ghostcloud/bin# docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                      PORTS               NAMES
09475612bb40        ghostcloud.cn:5005/gcali:1.0.8   "/usr/local/ghostclou"   2 minutes ago       Up 2 minutes                                    gcsagent
f8eb8005de81        myimage                          "/bin/sh -c 'echo 'he"   15 minutes ago      Exited (0) 15 minutes ago                       compassionate_cray
46ffa55f5680        ubuntu                           "/bin/bash"              37 minutes ago      Exited (0) 29 minutes ago                       lonely_mirzakhani
40b4301839a1        ubuntu                           "echo hello-world"       40 minutes ago      Exited (0) 40 minutes ago                       compassionate_torvalds

compassionate_cray就是一個名稱。通過容器命令,可以提供兩個有用的功能:

  • 默認你是通過容器的ID進行操作,你可以為特定容器設置容器名稱,比如如果容器是一個web應用,你可以把它標記為web。
  • 容器之間,可以通過名稱進行相互的引用和鏈接.

容器的名稱通過--name來進行設置:

$ docker run -d -P --name web training/webapp python app.py

我們可以通過docker inspect來查看容器的詳細參數:

```

##2 容器的默認網絡
Docker自身通過網絡驅動來管理網絡。默認Docker提供兩種網絡驅動,bridge和overlay。你可以自己編寫網絡驅動作為插件,但是這個工作比較麻煩,這兒就省略了。
Docker安裝後,會自動生成3種網絡:

root@gctest:~# docker network ls NETWORK ID NAME DRIVER 782f465fa194 none null 6887a082de45 host host 6e75573f448f bridge bridge

bridge是一種特殊的網絡模式,這是默認的網絡模式。我們可以通過inspect來查看詳細信息:
```Bash
root@gctest:~# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.1/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Containers": {
            "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": {
                "EndpointID": "48fbb1fa53db756cc4afdf4db81182bd4347bf208dba49ed27c3187ea2d6c8c0",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

從上麵我們可以看出,橋接的網卡是172.17.0.1/16,網關是172.17.0.1。其中有一個容器連接到了這個橋接網絡中,它的ip是172.17.0.2/16。 如果你想將容器從網絡中移除,你可以使用:

root@gctest:~# docker network disconnect bridge 85a5
root@gctest:~# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "6e75573f448f525f4edc07be25318af82f3a2c79640aa00eb403208583d542f3",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.1/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

3 創建自己的橋接網絡

Docker原生支持bridge和overlay網絡,bridge隻能在單個主機上使用。overlay可以在多台主機間使用,這部分將在後續進行詳細講解。下麵我們就來建立一個自己的網絡:

root@gctest:~# docker network create -d bridge mybridge
36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9
root@gctest:~# docker network ls
NETWORK ID          NAME                DRIVER
6e75573f448f        bridge              bridge
782f465fa194        none                null
6887a082de45        host                host
36328af2a0b1        mybridge            bridge

-d表示使用已有的bridge來創建新的網絡,你也可以省略該參數,這個是默認參數。

4 添加容器到網絡

默認情況,容器使用的是同一個bridge網絡,這樣可能有一定的安全隱患,為了做到完全的隔離,我們可以自己建一個橋接網絡,然後在啟動容器時將容器加入到自己的網絡中。比如:

root@gctest:~# docker run -it --net=mybridge ubuntu /bin/bash

如果你inspect你的網絡,你會看到詳細的連接信息:

root@gctest:~/.ghostcloud/bin# docker network inspect mybridge
[
    {
        "Name": "mybridge",
        "Id": "36328af2a0b1cf04c7f13254804abbea81b32cc0361b4407fb68e9f70b8ce6a9",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "2c1fda7b6efda429d2bf7c85a131200ee370512cea214a7fe423c28d952e1320": {
                "EndpointID": "1b988bffa26ca9e6ee3cbfc5081b8adb5dcb5cde359404ff6afb73fb954a2b93",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "85a568452350d44a467802383308b318a9bb79301714913d7df7a54bfc770567": {
                "EndpointID": "0440158825ce6c1e6efc224238ab83084761a9c2e6fa28f162d2188e514aa737",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

如果啟動時沒有指定網絡或想加入多個網絡,可以通過connect命令加入。

最後更新:2017-04-01 13:38:50

  上一篇:go 雲時代的分布式數據庫:阿裏分布式數據庫服務DRDS
  下一篇:go PostgreSQL 聚合函數講解 - 6 分組排序聚合