Cloud/Docker

[Docker] 도커 컨테이너 네트워크 관리 명령어

Yoonsoo Park 2024. 11. 26. 12:01

*해당 포스팅은 다음과 같은 환경에서 진행하였으니, 참고 바랍니다.

  • Docker Community Edition 
  • Ubunto Linux 22.04 (OS에 따라 설치 방법은 다소 상이하나, 사용법은 동일함)
  • VMware  Workstation pro ( x86_64, CPU  x 2, RAM 2GB, HDD 120GB)

 

1. 도커 네트워크의 특징

<도커 브리지 네트워크 구조도>

 

 도커는 도커 호스트 내부에서 다음과 같이 도커 컨테이너를 위한 네트워크를 구성할 수 있다. 추상적인 환경이라 직접적으로 와닿지는 않지만, 도커 컨테이너는 도커 엔진으로부터 한 개의 이더넷 인터페이스(NIC)와 사설 IP 주소를 할당받는다. 컨테이너의 통신 방식을 간략하게 설명하면 다음과 같다. 

컨테이너 -> 브리지 -> 도커 엔진 -> 호스트의 NIC -> L2 스위치 -> 라우터

 

 여기서 브리지는 L2 스위치 같은 역할을 하여, 같은 브리지로 연결된 컨테이너 간에는 별다른 설정을 하지 않아도 통신이 된다. 도커 엔진은 라우터와 같은 역할을 하게 되는데, 실제 라우터는 직접적으로 연결된 LAN 간의 라우팅을 기본적으로 해주는 것과 달리, 서로 다른 브리지에 속한 컨테이너는 직접적으로 통신이 되지 않는다. 통신을 할 수 있는 방법이 있지만, 추후 포스팅들에서 오버레이 네트워크를 설명하면서 언급하도록 하겠다. 

 

 

 

2. 도커 컨테이너 네트워크 관리 명령어

1. 도커 네트워크 목록 보기

docker network ls

 

2. 컨테이너의 IP 주소 확인

docker inspect <컨테이너 이름  | 컨테이너 ID> | grep  IPAddress

 

inspect 명령어는 도커 리소스(컨테이너, 이미지, 네트워크 등)의 세부 정보를 JSON 형식으로 출력해주는 명령어이다.

 

3. 도커 네트워크 생성

docker network create --driver=<드라이버종류> --subnet=<서브넷> --ip-range=<IP주소범위> --gateway=<게이트웨이주소> <네트워크명>


<드라이버 종류> : 보통 bridge 를 사용함. 
  ㄴ bridge, host, none, container, overlay 

<서브넷> : 만드는 네트워크에서 사용할 서브넷,  CIDR 표기 

<IP 주소 범위> : 서브넷 범위 내에서 호스트에 자동 할당할 범위 지정, CIDR 표기, 설정하지 않으면 기본 서브넷 주소 범위에서 할당됨.

 

4. 도커 네트워크를 지정하여 컨테이너 실행

docker container run [옵션] --net=<네트워크명> <Image 이름>

// 네트워크를 지정하지 않으면 Default Bridge 네트워크가 설정

#예시#
docker run -itd --net=myhome nginx:latest

 

5. 컨테이너 내부 네트워크 설정 방법

docker container run -it -d --add-host=<호스트명>:<IP주소> --dns=<CacheDNS주소> <이미지명>

<호스트명> : 새로 등록할 호스트명  (/etc/hosts) 
<IP주소> : 새로 등록할 호스트의 IP 주소 
<CacheDNS주소> : 캐시 네임 서버 주소

 

6. 컨테이너 포트 주소 설정

컨테이너의 포트주소를 오픈할  도커 내부의 컨테이너들만 접근할  있고 외부에서는 접근할  없도록 성해야 하는 경우가 있다. 그때 다음과 같이 --expose 옵션을 주어 포트를 설정한다. 

 

docker container run -it -d --expose <오픈할 컨테이너 포트> <이미지명>

#예시#
docker container run -itd --expose=3333 --env MYSQL_ROOT_PASSWORD=1234 mysql

 

7. 호스트와 컨테이너 포트 매핑(port mapping)

그렇다면, 컨테이너의 특정 포트를 열고, 호스트와 연결하기 위해서는 어떻게 해야할까? 이때 사용되는 것이 호스트와 컨테이너 간의 포트 매핑(port mapping)이다. 포트 매핑은 -p 옵션을 통해 설정할 수 있다. 다음의 설정 방법과 구조도를 참고하자. 

docker container run -itd  -p <호스트 포트>:<컨테이너 포트> <이미지명>

 

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디,

"당신의 노력을 신은 안다. 당신의 모든 노력은 보상받을 것이다. 보상이 늦어질수록 당신에게 유리하다. 하늘나라 재무부에서는 복리로 계산하기 때문이다", Napoleon Hill

 

"바람에 흔들리지 말고, 자기에 대한 확신과 신뢰를 가지고 가자"