1. 程式人生 > >使用 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=<NETWORK>
    選項另行指定,否則 Docker 守護程序預設情況下會將容器連線到此網路。在主機上使用 ifconfig命令,可以看到此網橋是主機的網路堆疊的一部分。
  • none 網路在一個特定於容器的網路堆疊上添加了一個容器。該容器缺少網路介面。
  • host 網路在主機網路堆疊上新增一個容器。您可以發現,容器中的網路配置與主機相同。

使用者定義的網路

您可以建立自己的使用者定義網路來更好地隔離容器。Docker 提供了一些預設網路驅動程式來建立這些網路。您可以建立一個新 bridge 網路或覆蓋一個網路。也可以建立一個網路外掛或遠端網路並寫入您自己的規範中。
您可以建立多個網路。可以將容器新增到多個網路。容器僅能在網路內通訊,不能跨網路進行通訊。一個連線到兩個網路的容器可與每個網路中的成員容器進行通訊。當一個容器連線到多個網路時,外部連線通過第一個(按詞典順序)非內部網路提供。

在 Power 上建立一個覆蓋 Docker 網路

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[[email protected] ~]# docker network create test-network

e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21

[[email protected] ~]# docker network inspect test-network

[

{

"Name": "test-network",

"Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",

"Scope": "local",

"Driver": "bridge",

"IPAM": {

"Driver": "default",

"Config": [

{}

]

},

"Containers": {},

"Options": {}

}

]

[[email protected] ~]# 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命令檢視更多資訊。
可以通過在建立容器時顯式提及某個網路,從而將該容器連線到該網路。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

[[email protected] ~]# docker run -itd --name=test1 --net=test-network ppc64le/busybox /bin/sh

7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113

[[email protected] ~]# 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": {}

}

]

也可以動態地將容器連線到網路。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[[email protected] ~]# docker run -itd --name=test2 ppc64le/busybox /bin/sh

69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a

[[email protected] ~]# docker network connect test-network test2

[[email protected] ~]# 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": {}

}

]