[Docker] 도커 네트워크
네트워크 기본을 기반으로 도커에서의 네트워크를 알아보겠습니다.
Docker에서는 가상 네트워크 개념을 사용합니다. 가상 네트워크란 논리적으로 구성된 네트워크로, 하나의 물리적 네트워크 인터페이스를 기반으로 여러 개의 가상 네트워크를 생성할 수 있습니다. 가상 네트워크는 VLAN(Virtual LAN)과 같은 개념으로 사용될 수 있습니다.
도커도 가상 네트워크 개념을 사용합니다. 공인망으로부터 분리된 사설망 네트워크가 만들어지고, 사설망 내부에는 가상의 네트워크가 존재합니다.
네트워크 브릿지
위 사진을 보면 가상 네트워크 내부에 네트워크 브릿지가 존재합니다. 네트워크 브릿지란 도커 컨테이너 환경에서 네트워크를 관리하기 위한 기능입니다. 호스트와 컨테이너 간의 통신을 가능하게 하며, 컨테이너 간의 통신 또한 지원합니다.
default 네트워크 브릿지
도커에서는 컨테이너 생성 시 default 네트워크 브릿지를 제공합니다.. 컨테이너 생성 시에 별도의 네트워크 지정을 하지 않아도 기본적으로 사용할 수 있는 브릿지입니다. default 브릿지 또한 도커 컨테이너가 외부와 통신하고 인터넷에 접속할 수 있도록 지원합니다. 그러나 동일한 네트워크 대역을 공유하기 때문에 컨테이너가 많아지면 네트워크가 관리가 어려워질 수 있습니다. 이는 네트워크 충돌로 이어질 가능성을 포함하고 있습니다.
default 브릿지의 경우 기본적으로 할당되는 IP는 172.17.0.1 입니다. CIDR로 16을 갖기 때문에 IP 대역은 127.17.0.1 ~ 172.17.255.255 까지의 IP 주소를 포함합니다.
사용자 정의 네트워크 브릿지
사용자 정의 브릿지란 사용자가 직접 네트워크 브릿지를 정의한 브릿지입니다. default 브릿지와의 차이점이라곤 기본으로 생성되는 브릿지가 아닌 직접 정의하는 브릿지입니다.
default 브릿지와 달리 IP 대역과 Gateway를 직접 설정하여 브릿지를 생성할 수 있습니다. 아래 사진의 경우 IP 대역으로 10.0.0.0/24, Gateway는 10.0.0.1로 설정하였습니다.
해당 브릿지를 사용하여 컨테이너를 실행하고, 해당 컨테이너의 정보를 확인해보겠습니다.
$ docker container inspect containerA
해당 컨테이너가 어떤 브릿지로부터 관리되고 있는지를 알 수 있습니다.
가상 네트워크와 가상 인터페이스
도커는 내부적으로 iptables를 활용하여 컨테이너의 네트워크 통신을 관리합니다. 도커는 컨테이너를 생성할 때마다 가상의 네트워크 인터페이스를 생성하고, 해당 인터페이스와 호스트 사이의 네트워크 통신을 위해 iptables 규칙을 설정합니다.
iptables 규칙에는 컨테이너 간 통신, 호스트와 컨테이너 간 통신 등을 관리합니다. 위 사진을 보면 동일한 브릿지 네트워크에서 컨테이너 간의 통신을 보여주고 있습니다. 각 Container 별로 네트워크 인터페이스를 가지게 됩니다. 인터페이스에는 IP 주소가 할당되며 iptables는 이를 통해 컨테이너 간 통신을 가능하게 합니다.
컨테이너 간 통신 주의점
iptables를 사용하여 컨테이너 간의 통신이 가능함을 알았습니다. 그러나 주의할 점이 있는데, 컨테이너 간 통신을 위해서는 같은 브릿지 네트워크에 속해야 합니다. 다른 브릿지에 존재하는 컨테이너 간에 통신은 수행할 수 없습니다.
default 브릿지 네트워크에 속한 ubuntuA와 ubuntuB 간의 통신은 정상적으로 수행되지만, 다른 브릿지 네트워크에 속한 ubuntuC와의 통신은 불가능합니다.
같은 브릿지 네트워크
같은 브릿지에 속한 컨테이너 간 정상적으로 통신됨을 알 수 있습니다.
다른 브릿지 네트워크
다른 브릿지에 속한 컨테이너 간 통신이 수행되지 않습니다.
[2024 NEW] 개발자를 위한 쉬운 도커 강의 - 인프런
현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근본적인 질문
www.inflearn.com