DevOps/Docker

[Docker] Network, 호스트와 컨테이너의 구조

기록하는 백앤드개발자 2024. 5. 4. 10:47
반응형

ㅁ 들어가며

ㅇ 도커 컨테이너의 내부 통신에 대해서 고민하면서 도커 네트워크의 구조에 대해서 공부하게 되었다.

ㅇ 이 번 글의 정리 목표는 도커 네트워크의 구조를 이해하고 네트워트 설정의 특성을 이해하여 적절한 네트워크를 구성을 제시하는데 있다. 

 

ㅁ 도커 네트워크의 구조

도커 네트워크는 host, Bridge, Container의 관계이다. 가정 홈 네트워크와 비교하면 더 쉽게 이해할 수 있다. Internet을 여러 장비가 사용하기 위해서는 공유기가 필요하다. 

 

eth0

  실제 IP가 할당되는 host 네트워크 인터페이스이다. 가정에 제공되는 Internet은 공유기를 통해 다른 장비와 연결된다.

 

docker0

  도커가 설치될 때, 기본적으로 구성되는 브리지이다. host 네트워크와 container의 연결을 해주는 역할을 한다. host 네트워크의 제한된 IP를 여러 Container에 공유하는 공유기의 역할을 한다.

 

veth

  Container 내부와 연결해 주는 역할을 하는 가상 인터페이스이다. Container가 생성되는 동시에 veth가 생성되며, eth0과 연결되어 외부와의 통신이 가능해 진다. 리눅스의 Virtual Ethernet Interface 을 의미한다.

 

 Internet공유기를 통해 나의 맥북eth0으로 연결되고, eth0docker0에 연결되어 Container와 연결된다. 

 ㅇ Docker 네트워크 드라이버는 Single Host, Multi Host로 나뉘어진다.

 ㅇ Single Host: bridge, host, none

 ㅇ Multi Host: overlay

 

ㅁ Bridge 네트워크

  가장 기본적이고 많이 사용되는 도커 네트워크 유형이다. 가상 네트워크를 만들어 컨테이너를 서로 연결하고 각 컨테이너는 네트워크 내에서 고유한 IP 주소를 할당받아 외부와의 통신을 허용한다. Docker의 관점에서 Bridge 네트워크는 동일한 Bridge 네트워크에 연결된 컨테이너가 통신할 수 있도록 하는 동시에 해당 Bridge 네트워크에 연결되지 않은 컨테이너로부터 격리를 제공하는 소프트웨어 Bridge를 사용한다. Docker를 시작하면 Bridge가 자동으로 생성되고, 별도로 지정하지 않으면 컨테이너의 기본 네트워크가 된다. 

docker doc- Bridge

 

장점

 - 사용 편의성이 뛰어나고 설정이 간단하다.
 - 여러 컨테이너 간 통신에 효과적이다.
 - 네트워크 이름 기반의 명확한 식별 방식을 제공한다.

 

ㅇ 단점

 - 여러 네트워크를 관리해야 할 경우 복잡성이 증가할 수 있다.
 - 네트워크 이름 충돌 문제가 발생할 수 있다.

 

ㅁ Host 네트워크

컨테이너가 Host 시스템의 네트워크 네임스페이스와 동일한 네트워크에 속하여, Host 시스템과 동일한 IP 주소를 사용하며, 서로 직접 통신할 수 있다.

docker doc- host


장점
- 설정이 매우 간편하다.
- 컨테이너가 호스트 시스템의 다른 프로세스와 쉽게 통신할 수 있도록 한다.
- 성능이 빠르다.


단점

- 네트워크 격리가 불가능하다.
- 보안 위험이 증가한다.
- 호스트 시스템의 네임스페이스를 변경할 수 있다.

 

사용 사례
- 호스트 시스템과 긴밀하게 통합되어야 하는 컨테이너
- 신뢰할 수 있는 개발 환경
- 성능이 중요한 시나리오

ㅁ 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 docs - network

Docker Network : 호스트와 컨테이너를 위한 네트워크를 구성해보자

 Docker Network 에 대해

Introduction to Docker Swarm Mode and Multi-Host Networking

 

반응형