본문 바로가기

Linux(Centos or RHEL)/docker

도커 기본 브릿지와 사용자 정의 브릿지의 차이 (3)

이전 도커의 브릿지에 관한 글에서 사용자 정의 브릿지와 기본 브릿지의 차이들을 설명한 적이 있습니다.

 

(1) 사용자 정의 브릿지는 자동으로 컨테이너 간의 DNS 문제를 해결해 줍니다.

(2) 사용자 정의 브릿지는 더 나은 고립을 제공합니다.

(3) 컨테이너를 정지시키지 않고 네트워크에 접근/분리 할 수 있습니다.

(4) 각각의 사용자 정의 브릿지는 설정이 가능합니다.

(5) 기본 브릿지 네트워크는 연결된 컨테이너 간의 환경변수 공유가 가능합니다.

 

이 중에서 (3)에 대한 테스트를 해 보겠습니다.

(3)에 대한 영어 원문을 보면, 기본 브릿지 네트워크에서는 컨테이너를 중지시키지 않고는 컨테이너를 제거할 수 없는 것처럼 나와 있으나, 실제로 해 본 결과, 가능한 것 같습니다...

https://docs.docker.com/network/bridge/

 

 

https://docs.docker.com/engine/reference/commandline/network_connect/

step 1. 사용자 정의 브릿지 네트워크에 컨테이너 추가 및 삭제

1] 기본 브릿지 네트워크를 사용하는 컨테이너를 하나 만듭니다.

[root@centos77 ~]# docker run -it -d --name alp1-1 alpine

da280ea210e438cef48244506ce2a725077f0a4d3e71aceef60595eb127b6578

[root@centos77 ~]# docker network inspect bridge

[

{

"Name": "bridge",

 

 

"Containers": {

"da280ea210e438cef48244506ce2a725077f0a4d3e71aceef60595eb127b6578": {

"Name": "alp1-1",

"EndpointID": "597146971c68bd1b23fc9504469131d269ffd478bb5995dbe5a24643a0117cf3",

"MacAddress": "02:42:ac:12:00:02",

"IPv4Address": "172.18.0.2/24",

"IPv6Address": ""

}

},

 

...

 

[root@centos77 ~]# docker exec alp1-1 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

68: eth0@if69: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.2/24 brd 172.18.0.255 scope global eth0

valid_lft forever preferred_lft forever

[root@centos77 ~]#

 

기본 브릿지에 컨테이너가 연결되어있고, 컨테이너의 ip도 기본 브릿지에서 할당한 것 밖에 없음을 알 수 있습니다.

 

 

 

2] 사용자 정의 브릿지 네트워크에 컨테이너 추가

[root@centos77 ~]# docker network connect br1 alp1-1

[root@centos77 ~]# docker network inspect br1

[

{

"Name": "br1",

 

...

 

"Containers": {

"da280ea210e438cef48244506ce2a725077f0a4d3e71aceef60595eb127b6578": {

"Name": "alp1-1",

"EndpointID": "6617adeec5507f51a2cccd2450dc55319a1232a8b87ec843e24c5254fbac05c3",

"MacAddress": "02:42:ac:1c:01:01",

"IPv4Address": "172.28.1.1/24",

"IPv6Address": ""

}

},

 

...

 

[root@centos77 ~]# docker exec alp1-1 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

68: eth0@if69: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.2/24 brd 172.18.0.255 scope global eth0

valid_lft forever preferred_lft forever

70: eth1@if71: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:1c:01:01 brd ff:ff:ff:ff:ff:ff

inet 172.28.1.1/24 brd 172.28.1.255 scope global eth1

valid_lft forever preferred_lft forever

[root@centos77 ~]#

 

컨테이너에서 br1 네트워크에서 부여한 ip가 있음을 확인할 수 있습니다.

 

 

3] 사용자 정의 브릿지 네트워크에 컨테이너 제거

[root@centos77 ~]# docker network disconnect br1 alp1-1

[root@centos77 ~]# docker network inspect br1

[

{

"Name": "br1",

 

...

 

"Containers": {},

 

...

 

[root@centos77 ~]# docker exec alp1-1 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

68: eth0@if69: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.2/24 brd 172.18.0.255 scope global eth0

valid_lft forever preferred_lft forever

[root@centos77 ~]#

 

컨테이너가 네트워크에서 없어진 것과, 컨테이너에서 br1에서 부여한 ip가 없어진 것을 확인할 수 있습니다.

 

 

 

step 2. 기본 브릿지 네트워크에 컨테이너 삭제 및 추가

1] 위에서 만든 컨테이너를 기본 브릿지 네트워크에서 삭제시켜봅니다.

[root@centos77 ~]# docker network disconnect bridge alp1-1

[root@centos77 ~]# docker exec alp1-1 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

[root@centos77 ~]# docker network inspect bridge

[

{

"Name": "bridge",

 

...

 

"Containers": {},

 

...

 

[root@centos77 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

da280ea210e4 alpine "/bin/sh" 12 minutes ago Up 12 minutes alp1-1

[root@centos77 ~]#

 

컨테이너에서 ip를 확인해 보아도 기본 브릿지에 속한 ip도 없을 뿐더러, 기본 브릿지 네트워크의 정보를 봐도 컨테이너가 없어진 것을 확인할 수 있습니다.

 

 

2] 위에서 만든 컨테이너를 기본 브릿지 네트워크에 다시 추가시켜봅니다.

[root@centos77 ~]# docker network connect bridge alp1-1

[root@centos77 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

da280ea210e4 alpine "/bin/sh" 13 minutes ago Up 13 minutes alp1-1

[root@centos77 ~]# docker exec alp1-1 ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

74: eth3@if75: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP

link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff

inet 172.18.0.2/24 brd 172.18.0.255 scope global eth3

valid_lft forever preferred_lft forever

[root@centos77 ~]#

 

컨테이너에 ip도 부여가 되어 있는 것을 확인할 수 있습니다.