Docker 101 - 4장: Docker Network는 뭘까요 ?

okkkkkky·2023년 8월 9일
0
post-thumbnail

Docker 네트워크는 어떤 것인지, 그리고 어떻게 이루어져있는지, Docker를 이해하기 위해 조금 더 들여다 보는 시간을 가지면 좋겠습니다 !

docker network

Docker network란 무엇일까요 ?

우선 컨테이너는 각각 격리된 환경이라고 자주 언급을 했었는데요, 컨테이너끼리 서로 통신을 해야 하는 경우가 많을 것입니다. 이 통신을 하기 위해 이전에는 각 컨테이너 별로 이름을 지정해주어 이름과 이름을 서로 연결짓는 방식을 사용했었는데요, 현재는 "docker 내부에서 컨테이너들끼리 연결해주는 네트워크를 생성"해줍니다. 이 행동은 Docker Client에서 Docker CLI를 통해 생성해줄 수 있으며, 이 격리된 네트워크 역시 이름을 지정해주면 간단하게 마무리됩니다. 한 호스트에는 역시 많은 네트워크를 가질 수 있습니다.

Docker network는 어떻게 구성되어있나요 ?

Docker 내부에서 네트워크가 어떻게 구성되어있는지 살펴보기 위해서는 아래의 개념들에 대해 알아보는 것이 좋습니다 !

docker 네트워크

Docker network 드라이버

Docker에서는 네트워크 드라이버를 제공해줍니다. 아래와 같이 자주 사용하는 종류들에 대해서 간단히 알아볼까요 ?

bridge

제일 기본 네트워크 드라이버가 됩니다. 어떤 네트워크를 사용할지 지정하지 않으면, bridge로 자동으로 세팅이 됩니다. 브릿지 네트워크는 기본적으로 위에서 설명한 호스트 내부에 있는 컨테이너들끼리 서로 통신해야 하는 경우에 사용되며, docker0이라는 기본값 이름을 가집니다.

host

컨테이너와 호스트 간의 네트워크 격리를 끊어냅니다. 즉, 호스트의 네트워크를 직접적으로 사용합니다.

none

컨테이너가 통신을 불가능하게 하고자 하는 경우 사용합니다. 즉, 컨테이너에 네트워크 인터페이스를 붙이고 싶지 않을 때 컨테이너 실행 시, --network none 플래그를 붙여줄 수 있습니다.

overlay

이 드라이버는 같은 호스트 내의 컨테이너들 간의 통신이 아닌 다른 Docker daemon에 있는 컨테이너와의 통신을 도와줍니다.

veth

리눅스의 virtual ethernet interface의 줄임말인 veth는 말그대로 가상의 네트워크 인터페이스입니다. 리눅스에서 제공되는 기술로, Docker 엔진에서 컨테이너가 생성되면서 자동으로 생성됩니다. veth는 컨테이너와 통신하기 위해 만들어지기 때문에 이미지에 의해 생성되는 컨테이너의 개수만큼 veth의 개수가 늘어납니다.

eth0

eth0은 리눅스 시스템에서 네트워크 인터페이스를 식별하는데 사용되는 이름입니다. Docker 컨테이너에서 처음으로 사용하는 네트워크 인터페이스를 eth0으로 나타냅니다. 이렇게 각 컨테이너 별로 첫 번째 네트워크 인터페이스인 eth0을 할당받게 되고 위의 이미지처럼 docker0, 즉 브릿지 네트워크 내부의 veth들과 개별적으로 연결되고, 이 브릿지 네트워크는 호스트의 eth0와 연결되어 통신을 주고 받게 됩니다.

참고로 위의 내용들은 ifconfig와 같은 명령어로 확인해볼 수 있는데요, Mac OS나 Window OS에서는 docker0 브릿지나 veth 인터페이스들이 VM 안에 있기 때문에 확인할 수 없습니다.

그래서 아래의 CLI를 입력하게 되면, 아래와 같이 현재 네트워크 드라이버들에 대한 정보를 간단하게 확인할 수 있습니다.

docker network ls

추가로, 아래의 CLI를 통해 현재 브릿지 네트워크에 어떤 컨테이너가 연결되어있는지 간단하게 확인해볼 수 있습니다.

docker network inspect bridge

docker network inspect bridge

이외에도 아래의 CLI를 통해 직접적으로 network를 관리할 수 있습니다.

  • Docker 네트워크 생성하기
docker network create --driver=[NETWORK DRIVER] [DRIVER NAME]

# Example
docker network create --driver=bridge okcorn-network
  • 네트워크를 지정하여 컨테이너를 실행하기
docker run -d --network=[NETWORK DRIVER] [CONTAINER NAME]
  • 네트워크 연결하거나 끊기
docker network connect [OPTIONS] NETWORK CONTAINER
docker network disconnect [OPTIONS] NETWORK CONTAINER

# Example
docker network disconnect multi-host-network container1
docker network connect multi-host-network container1 // docker run -itd --network=multi-host-network container1
  • 네트워크 세부사항 확인하기
docker network inspect [OPTIONS] NETWORK [NETWORK...]

이렇게 Docker 내부에서 컨테이너끼리 혹은, 호스트와 어떻게 통신하는지 간단하게 알아보았습니다. 다음 게시글에서는 Docker Compose에 대해서 알아보도록 하겠습니다 !

참고
https://docs.docker.com/network/drivers/
https://seosh817.tistory.com/373
https://hanseom.tistory.com/243
원티드 백엔드 챌린지 2023년 8월 강의 내용

0개의 댓글