Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

유비무환

도커 네트워크 본문

IT/도커

도커 네트워크

키다리병장 2021. 10. 26. 22:03

도커란?

애플리케이션을 개발, 배송, 실행하기 위한 오픈 플랫폼을 의미합니다.

Docker architecture

 

제목에서와 같이 네트워크에 중점을 둔 글이기 때문에 도커에 대한 설명은 넘어가고 바로 네트워크를 살펴보도록 하겠습니다.

 

도커 문서를 살펴보면 네트워크의 종류가 다음과 같이 나와있습니다.

 

도커 네트워크

  • bridge : 기본 네트워크 드라이버. 일반적으로 통신이 필요한 독립 실행형 컨테이너에서 애플리케이션을 실행할 때 사용됩니다.
  • host : 독립형 컨테이너의 경우 컨테이너와 호스트 간의 네트워크 격리를 제거하고 호스트의 네트워크를 직접 사용합니다.
  • overlay : 여러 도커 데몬을 함께 연결하고 스웜 서비스가 서로 통신할 수 있도록 합니다.
  • macvlan : 컨테이너에 MAC 주소를 할당하여 네트워크에서 물리적 장치로 표시할 수 있습니다.
  • none : 모든 네트워킹을 비활성화합니다.
  • network plugins : 도커와 함께 타사 네트워크 플러그인을 설치하고 사용할 수 있습니다.

 

여러 가지 네트워크를 확인할 수가 있는데요. 해당 글에서는 이 중에서 가장 많이 사용되는 bridge, host, overlay에 대해서 알아볼 예정입니다.

 

브릿지 네트워크

동일한 브릿지 네트워크에 연결된 컨테이너가 서로 통신할 수 있도록 하는 소프트웨어 브릿지를 사용하고 해당 브릿지 네트워크에 연결되지 않은 컨테이너로부터 격리시킴으로써 네트워크를 보호합니다.

 

동일한 호스트에서 실행되는 컨테이너에만 적용됩니다. 만약 서로 다른 호스트에서 실행되는 컨테이너끼리 통신하고 싶다면 오버레이 네트워크를 이용할 수 있습니다.

 

도커를 시작하면 기본 브릿지 네트워크가 자동으로 생성되고 별도의 사용자 지정이 없다면 새로 시작된 컨테이너는 해당 브릿지 네트워크에 연결됩니다.

 

사용자는 본인이 정의한 브릿지 네트워크를 만들 수도 있는데 이렇게 만들어진 사용자 정의 브릿지 네트워크기본 브릿지 네트워크보다 우수하다고 합니다. 아래 항목을 살펴보면서 어떤 점이 우수한지 알아봅시다.

 

  1. 사용자 정의 브릿지는 컨테이너 간에 자동 DNS 확인을 제공합니다.
    • 사용자 정의 브릿지에서는 컨테이너의 이름 혹은 별칭을 통해서 서로를 확인할 수 있습니다.
    • 기본 브릿지에서도 --link 옵션을 통해 가능은 하지만 수동으로 링크를 생성해야 하고, 컨테이너가 많아질수록 복잡해집니다.
  2. 사용자 정의 브릿지는 더 나은 격리를 제공합니다.
    • 네트워크가 지정되지 않은 모든 컨테이너가 기본 브릿지에 연결되다 보니 관련 없는 스택/서비스/컨테이너가 통신할 수 있습니다.
    • 반면에 사용자 지정 브릿지는 해당 네트워크에 연결된 컨테이너만 통신할 수 있습니다.
  3. 사용자 정의 브릿지는 컨테이너를 즉시 연결 및 분리할 수 있습니다.
    • 기본 브릿지에서는 컨테이너를 제거하려면 컨테이너를 중지하고 다른 네트워크 옵션으로 재생성해야 합니다.
  4. 각 사용자 정의 브릿지는 구성 가능한 브릿지를 만듭니다.
    • 기본 브릿지를 사용하는 경우 모든 컨테이너가 동일한 설정을 사용합니다.
    • 사용자 정의 브릿지는 요구 사항 별로 네트워크를 구성할 수 있습니다.
  5. 기본 브릿지에 연결된 컨테이너는 환경 변수를 공유합니다.
    • 이러한 유형의 환경 변수 공유는 사용자 정의 브릿지에서는 불가능하지만 환경 변수를 공유하는 좀 더 나은 방법이 있습니다.
      • 도커 볼륨을 사용하여 공유 정보가 포함된 파일이나 디렉터리를 사용할 수 있습니다.
      • compose 파일을 통해 공유 변수를 정의할 수 있습니다.
      • 스웜 서비스를 통해 공유 정보를 활용할 수 있습니다.

 

Bridge Network

 

// 사용자 정의 브릿지 네트워크 생성

$ docker network create my-net

 

// 네트워크 목록

$ docker network ls

 

// 도커 컨테이너 생성

$ docker create -it --name my-ubuntu \
  --network my-net \
  ubuntu \
  bash

 

// 컨테이너 실행

$ docker start my-ubuntu

 

// 컨테이너가 포함된 네트워크 확인

$ docker network inspect my-net

 

// 컨테이너 연결 끊기

$ docker network disconnect my-net my-ubuntu

 

// 컨테이너 연결

$ docker network connect my-net my-ubuntu

 

Host Network

호스트 모드의 컨테이너는 도커 호스트에서 격리되지 않으며 컨테이너에 자체 IP 주소가 할당되지 않고, 호스트와 네트워크를 함께 사용합니다.

 

// 도커 컨테이너 생성

$ docker create -it --name my-host \
  --network host \
  ubuntu \
  bash

 

// 컨테이너 실행

$ docker start my-ubuntu

 

// 컨테이너가 포함된 네트워크 확인

$ docker network inspect host

 

Overlay Network

오버레이 네트워크는 여러 도커 호스트 사이의 분산 네트워크를 만듭니다. 오버레이는 호스트 네트워크 상단에 위치하고 연결된 컨테이너끼리 통신할 수 있도록 합니다. 도커는 올바른 도커 호스트와 컨테이너로 각 패킷 라우팅을 투명하게 처리합니다.

 

Overlay Network

 

스웜을 초기화하거나 도커 호스트를 기존 스웜에 가입하면 도커 호스트에 두 개의 새로운 네트워크가 생성됩니다. (docker swarm init, docker swarm join)

  • ingress : 스웜 서비스와 관련된 제어 및 데이터 트래픽을 처리하는 오버레이 네트워크. 스웜 서비스를 생성하고 사용자 정의 오버레이 네트워크에 연결하지 않으면 기본적으로 ingress 네트워크에 연결됩니다.
  • docker_gwbridge : 개별 도커 데몬을 스웜에 참여하는 다른 데몬에 연결하는 브릿지 네트워크

 

 

사용자 정의 오버레이 네트워크는 사용자 정의 브릿지 네트워크를 생성하는 것과 같은 방식으로 생성할 수 있습니다. 서비스 또는 컨테이너는 둘 이상의 네트워크에 연결할 수 있고, 각각 연결된 네트워크를 통해서만 통신할 수 있습니다.

 

$ docker network create -d overlay my-overlay

 

 

만약 스웜 서비스나 독립 컨테이너가 다른 도커에서 실행 중인 컨테이너와 통신할 수 있는 네트워크를 만들고 싶다면 --attachable 옵션을 추가하면 됩니다.

$ docker network create -d overlay --attachable my-attachable-overlay

 

ingress 네트워크는 외부에 포트를 노출시킬 수 있는데 이렇게 노출된 포트는 모든 노드에 열려있고, 스웜 서비스는 라우팅 메시 기능을 사용해서 노출된 포트를 통해 들어온 요청을 active 컨테이너에 전달해줍니다. 

 

 

외부 로드 밸런서를 구성하여 스웜 서비스로 요청을 라우팅 되도록 구성할 수도 있습니다.

 

마무리를 어떻게 지어야 할지 모르겠네요. 끝입니다. ㅎㅎ

 

참고

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

 

Networking overview

 

docs.docker.com

 

'IT > 도커' 카테고리의 다른 글

Docker Desktop 설치 실패 이슈  (0) 2022.03.04
Docker Config, Secret  (0) 2022.03.02
Comments