[Docker] Network, 호스트와 컨테이너의 구조
ㅁ 들어가며
ㅇ 도커 컨테이너의 내부 통신에 대해서 고민하면서 도커 네트워크의 구조에 대해서 공부하게 되었다.
ㅇ 이 번 글의 정리 목표는 도커 네트워크의 구조를 이해하고 네트워트 설정의 특성을 이해하여 적절한 네트워크를 구성을 제시하는데 있다.
ㅁ 도커 네트워크의 구조
도커 네트워크는 host, Bridge, Container의 관계이다. 가정 홈 네트워크와 비교하면 더 쉽게 이해할 수 있다. Internet을 여러 장비가 사용하기 위해서는 공유기가 필요하다.
ㅇ eth0
실제 IP가 할당되는 host 네트워크 인터페이스이다. 가정에 제공되는 Internet은 공유기를 통해 다른 장비와 연결된다.
ㅇ docker0
도커가 설치될 때, 기본적으로 구성되는 브리지이다. host 네트워크와 container의 연결을 해주는 역할을 한다. host 네트워크의 제한된 IP를 여러 Container에 공유하는 공유기의 역할을 한다.
ㅇ veth
Container 내부와 연결해 주는 역할을 하는 가상 인터페이스이다. Container가 생성되는 동시에 veth가 생성되며, eth0과 연결되어 외부와의 통신이 가능해 진다. 리눅스의 Virtual Ethernet Interface 을 의미한다.
Internet은 공유기를 통해 나의 맥북에 eth0으로 연결되고, eth0는 docker0에 연결되어 Container와 연결된다.
ㅇ Docker 네트워크 드라이버는 Single Host, Multi Host로 나뉘어진다.
ㅇ Single Host: bridge, host, none
ㅇ Multi Host: overlay
ㅁ Bridge 네트워크
가장 기본적이고 많이 사용되는 도커 네트워크 유형이다. 가상 네트워크를 만들어 컨테이너를 서로 연결하고 각 컨테이너는 네트워크 내에서 고유한 IP 주소를 할당받아 외부와의 통신을 허용한다. Docker의 관점에서 Bridge 네트워크는 동일한 Bridge 네트워크에 연결된 컨테이너가 통신할 수 있도록 하는 동시에 해당 Bridge 네트워크에 연결되지 않은 컨테이너로부터 격리를 제공하는 소프트웨어 Bridge를 사용한다. Docker를 시작하면 Bridge가 자동으로 생성되고, 별도로 지정하지 않으면 컨테이너의 기본 네트워크가 된다.
ㅇ 장점
- 사용 편의성이 뛰어나고 설정이 간단하다.
- 여러 컨테이너 간 통신에 효과적이다.
- 네트워크 이름 기반의 명확한 식별 방식을 제공한다.
ㅇ 단점
- 여러 네트워크를 관리해야 할 경우 복잡성이 증가할 수 있다.
- 네트워크 이름 충돌 문제가 발생할 수 있다.
ㅁ Host 네트워크
컨테이너가 Host 시스템의 네트워크 네임스페이스와 동일한 네트워크에 속하여, Host 시스템과 동일한 IP 주소를 사용하며, 서로 직접 통신할 수 있다.
ㅇ 장점
- 설정이 매우 간편하다.
- 컨테이너가 호스트 시스템의 다른 프로세스와 쉽게 통신할 수 있도록 한다.
- 성능이 빠르다.
ㅇ 단점
- 네트워크 격리가 불가능하다.
- 보안 위험이 증가한다.
- 호스트 시스템의 네임스페이스를 변경할 수 있다.
ㅇ 사용 사례
- 호스트 시스템과 긴밀하게 통합되어야 하는 컨테이너
- 신뢰할 수 있는 개발 환경
- 성능이 중요한 시나리오
ㅁ None 네트워크
네트워크 기능을 제공하지 않는 가벼운 네트워크 유형이다.
컨테이너는 서로 직접 통신할 수 없으며, 외부 네트워크에 액세스할 수도 없다.
ㅇ 장점
- 리소스 사용량이 매우 적다.
- 네트워크 보안을 강화한다.
- 분리된 작업 공간을 제공한다.
ㅇ 단점
- 컨테이너 간 통신이 불가능하다.
- 외부 네트워크 액세스가 불가능하다.
- 사용 상황이 제한적이다.
ㅇ 사용 사례
- 민감한 데이터를 처리하는 컨테이너
- 네트워크 격리가 필수적인 시나리오
- 임시 작업 공간
ㅁ Container 네트워크
하나의 컨테이너의 네트워크 네임스페이스를 다른 컨테이너에 연결하여 서로 직접 통신할 수 있다.
하지만, 외부 네트워크에는 액세스할 수 없다.
docker doc- container-networks
ㅇ 장점
- 강력한 네트워크 격리를 제공한다.
- 특정 컨테이너 그룹 간의 통신을 제어할 수 있다.
- 유연한 네트워킹 구성이 가능하다.
ㅇ 단점
- 설정이 다소 복잡할 수 있다.
- 여러 컨테이너를 연결해야 할 경우 관리가 어려울 수 있다.
ㅇ 사용 사례
- 바인딩된 컨테이너의 테스트를 하는 경우 유용하다.
# redis 생성
$ docker run -d --name redis redis --bind 127.0.0.1
# redis-cli 설치
$ docker run --rm \종류 후 방로 삭제
-it --network container:redis patwie/redis-cli
ㅁ Overlay 네트워크
Overlay 네트워크는 여러 Docker 데몬 호스트 간에 분산 네트워크를 생성한다.
ㅇ 장점
- 여러 호스트에 분산된 컨테이너의 통신을 가능하게 한다.
- 확장성: 네트워크 인프라를 확장할 수 있다.
- 유연성: 다양한 네트워크 레이어를 도입하여 연연하게 구성 및 관리를 할 수 있다.
ㅇ 단점
- 복잡성: 기존 브릿지 네트워크에 비해 설정 및 관리가 복잡하다.
- 성능: 추가적인 네트워크 레이어를 도입하여 성능 저하가 발생할 수 있다.
- 호환성: 모든 네트워킹 환경과 호환되지 않아 추가적인 해결 작업이 필요할 수 있다.
ㅇ 사용사례
- 마이크로서비스 아키텍처: MSA에서 컨테이너 간 통신 및 네트워크 격리를 지원한다.
- 멀리 클라우드 환경: 여러 클라우드 환경에 분산 배포하고 통신하도록 지원가능하다.
ㅁ 함께 보면 좋은 사이트
ㅇ Docker Network : 호스트와 컨테이너를 위한 네트워크를 구성해보자
ㅇ Introduction to Docker Swarm Mode and Multi-Host Networking