도커에서의 브릿지 네트워크의 특징..?
아래의 링크에서 필요한 부분을 번역한 것입니다. 원문은 아래의 링크를 확인해 주시면 좋겠습니다.
https://docs.docker.com/network/bridge/
사전지식
네트워크에서의 브릿지란...?
・참고
https://developerin.tistory.com/18
http://www.ktword.co.kr/abbr_view.php?m_temp1=297
간단히 말해서 컴퓨터 내부에 있는 가상 스위치 허브라고 보시면 될 것 같습니다.
도커에서의 브릿지
도커에서의 브릿지는 주로 소프트웨어 브릿지를 의미합니다. 이 브릿지는 같은 브릿지에 연결된 컨테이너들끼리의 통신을 할 수 있게 해 주고, 브릿지에 연결되지 않은 컨테이너로부터는 고립시켜주는 역할을 합니다.
이 브릿지 네트워크는 같은 도커 데몬 호스트의 컨테이너에서만 동작합니다. 즉 다른 도커 데몬 호스트의 컨테이너와는 OS 레벨의 라우팅이 필요합니다. 대안으로는 overlay 네트워크를 사용하는 방법이 있습니다.
도커를 설치하고, 실행하면, 기본적으로 브릿지 네트워크가 생성되어있는 것을 확인할 수 있습니다.
[root@centos77 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
9803aa64b77c bridge bridge local
61f432d735cf host host local
16a3b4fdc56e none null local
[root@centos77 ~]#
도커 컨테이너를 생성할 때에 아무런 네트워크를 설정해주지 않으면 자동으로 기본 브릿지 네트워크에 연결됩니다. 도커에서는 사용자가 직접 브릿지를 만드는 것도 가능합니다.
사용자 정의 브릿지와 기본 브릿지의 차이
(1) 사용자 정의 브릿지는 자동으로 컨테이너 간의 DNS 문제를 해결해 줍니다.
기본 브릿지 네트워크를 사용하는 컨테이너들은 --link 옵션을 사용하지 않는 이상, 서로의 IP 주소를 통해서 접근해야 합니다. 하지만 사용자 정의 브릿지 네트워크에서는 따로 컨테이너의 이름이나 별칭을 지정하지 않아도 이름이나 별칭을 통해 접근이 가능합니다.
(2) 사용자 정의 브릿지는 더 나은 고립을 제공합니다.
--network를 따로 지정하지 않은 모든 컨테이너는 자동으로 기본 브릿지 네트워크에 할당됩니다. 이는 해당 stacks/services/containers 와 연관되지 않은 것들과도 통신이 가능하다는 의미입니다. 사용자 정의 브릿지는 해당 브릿지에 속해있는 컨테이너끼리만 통신이 가능합니다.
(3) 컨테이너를 정지시키지 않고 네트워크에 접근/분리 할 수 있습니다.
컨테이너를 정지시키지 않고 네트워크에 접근/분리할 수 있습니다. 원문에서는 기본 브릿지 네트워크에 소속된 컨테이너는 정지를 시키지 않고는 기본 브릿지 네트워크에서 제거가 불가능한 것처럼 나와 있으나, 테스트 해 본 결과 그냥 제거가 되었습니다...
(4) 각각의 사용자 정의 브릿지는 설정이 가능합니다.
물론 기본 브릿지 네트워크도 설정이 가능합니다. 하지만 기본 브릿지 네트워크에 속한 모든 컨테이너가 같은 설정(MTU, iptables 룰 등등)을 갖게 됩니다. 또한 기본 브릿지 네트워크의 설정을 적용시키기 위해서는 도커를 재시작 해야합니다.
하지만 사용자 정의 브릿지는 ”docker network create“ 명령어로 생성 및 설정이 가능하며, 다른 요구사항을 가진 네트워크가 필요할 경우, 각각의 브릿지 네트워크를 요구사항에 맞게 생성할 수 있습니다.
(5) 기본 브릿지 네트워크는 연결된 컨테이너 간의 환경변수 공유가 가능합니다.
기본적으로 두 컨테이너의 환경변수를 공유하는 방법은 두 컨테이너를 --link 플래그로 연결시키는 방법밖에 없었습니다. 이러한 방법은 사용자 정의 브릿지 네트워크에서는 불가능합니다. (이는 어떤식으로 하는지 잘 모르겠습니다. 테스트를 해 보았지만, 기본 브릿지에 소속된 컨테이너끼리 환경변수가 공유되지는 않았습니다. 또한, --link옵션을 이용한다고 해서 환경변수가 공유되는 것도 아니었습니다.)
하지만 아래와 같은 더 나은 아이디어가 있습니다.
- 도커 볼륨을 이용하여 컨테이너의 공유 정보를 저장하고 있는 파일이나 디렉토리를 여러 컨테이너에서 마운트 하는 것이 가능합니다.
- 여러 컨테이너를 docker-compose 명령어로 같이 가동시킵니다. compose파일에는 공유되는 변수를 정의하는 것이 가능합니다.
- 컨테이너를 secrets나 configs를 공유할 수 있는 swarm services로 가동시키는 것이 가능합니다.