使用 Docker 容器網絡

使用 Docker 容器網絡

Docker 容器網絡概述

要構建具有安全的一致行爲的 Web 應用程序,可以使用 Docker 網絡特性。根據定義,網絡爲容器實現了完全隔離。因此,控制應用程序所在的網絡很重要。Docker 容器網絡爲您提供了這種控制能力。
本文概述 Docker 引擎交付原生的默認網絡行爲,介紹默認創建的網絡類型,以及如何創建您自己的、用戶定義的網絡。

安裝 Docker 時,會自動創建 3 個網絡。使用 docker network ls命令列出這些網絡。

$ docker network ls
NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

這 3 個網絡包含在 Docker 實現中。運行一個容器時,可以使用 the --net標誌指定希望在哪個網絡上運行該容器。您仍然可以使用這 3 個網絡。

  • bridge 網絡表示所有 Docker 安裝中都存在的 docker0 網絡。除非使用 docker run --net=選項另行指定,否則 Docker 守護進程默認情況下會將容器連接到此網絡。在主機上使用 ifconfig命令,可以看到此網橋是主機的網絡堆棧的一部分。/

  • none 網絡在一個特定於容器的網絡堆棧上添加了一個容器。該容器缺少網絡接口

  • host 網絡在主機網絡堆棧上添加一個容器。您可以發現,容器中的網絡配置與主機相同。

用戶定義的網絡

創建自己的用戶定義網絡來更好地隔離容器。Docker 提供一些默認網絡驅動程序來創建這些網絡。可以創建一個新 bridge 網絡或覆蓋一個網絡。也可以創建一個網絡插件或遠程網絡並寫入自己的規範中。 可以創建多個網絡。可以將容器添加到多個網絡。容器僅能在網絡內通信,不能跨網絡進行通信。一個連接到兩個網絡的容器可與每個網絡中的成員容器進行通信。當一個容器連接到多個網絡時,外部連接通過第一個(按詞典順序)非內部網絡提供。

創建一個覆蓋 Docker 網絡

Docker 默認情況下會創建一個與 docker0網橋對應的 bridge 網絡。您也可以創建自己的網絡。docker network命令有許多選項可用來管理網絡。

[root@localhost ~]# docker network create test-network
e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21  
[root@localhost ~]# docker network inspect test-network
[
   {
       "Name": "test-network",
       "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
       "Scope": "local",
       "Driver": "bridge",
       "IPAM": {
           "Driver": "default",
           "Config": [
               {}
           ]
       },
       "Containers": {},
       "Options": {}
   }
]  
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER
e12f674fea62        bridge              bridge             
0151f24befe9        host                host               
e2f569d57eb8        test-network        bridge             
e72a1d986a84        none                null

另外,還可以採用其他一些選項,比如 --subnet、--gateway和 --ip-range。可以使用 docker network – help或 docker network [COMMAND] – help命令查看更多信息。

可以通過在創建容器時顯式提及某個網絡,從而將容器連接到該網絡。

[root@localhost ~]# docker run -itd --name=test1 --net=test-network ppc64le/busybox /bin/sh
7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113
[root@localhost ~]# docker network inspect test-network
[
   {
       "Name": "test-network",
       "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
       "Scope": "local",
       "Driver": "bridge",
       "IPAM": {
           "Driver": "default",
           "Config": [
               {}
           ]
       },
       "Containers": {
           "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {
               "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",
               "MacAddress": "02:42:ac:12:00:02",
               "IPv4Address": "172.18.0.2/16",
               "IPv6Address": ""
           }
       },
       "Options": {}
   }
]

也可以動態地將容器連接到網絡。

[root@localhost ~]# docker run -itd --name=test2 ppc64le/busybox /bin/sh
69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a
 
[root@localhost ~]# docker network connect test-network test2
[root@localhost ~]# docker network inspect test-network
[
   {
       "Name": "test-network",
       "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
       "Scope": "local",
       "Driver": "bridge",
       "IPAM": {
           "Driver": "default",
           "Config": [
               {}
           ]
       },
       "Containers": {
           "69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a": {
               "EndpointID": "5dc4877e71eca2243167e97153d56c5334d98991fcc3eb2f7f968d0b68416255",
               "MacAddress": "02:42:ac:12:00:03",
               "IPv4Address": "172.18.0.3/16",
               "IPv6Address": ""
           },
           "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {
               "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",
               "MacAddress": "02:42:ac:12:00:02",
               "IPv4Address": "172.18.0.2/16",
               "IPv6Address": ""
           }
       },
       "Options": {}
   }
]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章