Docker 네트워킹 및 포트 매핑 가이드
KUKJIN LEE • 3개월 전 작성
Docker 네트워킹이란?
Docker 네트워킹을 이해하기 위해, 컨테이너를 아파트(호)로 생각하면 됩니다. 각 아파트(컨테이너)는 같은 건물(Docker 호스트) 안에 있지만, 서로 독립적인 공간입니다. 네트워킹은 아파트(호)들이 서로 소통하고, 외부(현관문)와 연결되는 방법을 제공합니다.
주요 네트워크 드라이버
-
Bridge: 아파트 내부의 인터폰 시스템 생각하시면 됩니다. (Docker 호스트 내 컨테이너 간 통신에 사용됩니다.)
-
Host: 컨테이너가 호스트의 네트워크 스택을 직접 사용합니다.
-
None: 컨테이너의 모든 외부 연결을 차단합니다. 방음 처리된 아파트라고 생각하면 됩니다.
네트워크 관리 명령어
# 네트워크 생성
docker network create [OPTIONS] NETWORK
# 네트워크 목록 조회
docker network ls
# 네트워크 상세 정보 확인
docker network inspect NETWORK
# 네트워크 제거
docker network rm NETWORK
# 사용되지 않는 모든 네트워크 제거
docker network prune
포트 매핑
포트 패밍은 외부와 소통하는 것을 생각하면 됩니다. 외부에서 컨테이너 내부의 서비스에 접근할 수 있게 해주는 방법입니다. 쉽게 얘기하면 초인종입니다.
기본 포트 매핑
docker run -p 8080:80 nginx
"80번 초인종(컨테이너의 80 포트)을 눌렀을 때, 8080호 (101동 8080호)로 연결해주세요" 를 생각하시면 됩니다.
다중 포트 매핑
여러 포트를 동시에 매핑할 수 있습니다.
docker run -p 8080:80 -p 443:443 nginx
특정 IP에 대한 포트 매핑
특정 IP 주소에 대해서만 포트를 매핑할 수 있습니다.
docker run -p 127.0.0.1:8080:80 nginx
이는 "80번과 443번 초인종을 각각 8080번과 443번 방으로 연결해주세요"라고 하는 것과 같습니다.
컨테이너 간 통신
(중요) 같은 네트워크에 있는 컨테이너들은 서로의 이름을 사용해 통신할 수 있습니다.
docker network create mynetwork
docker run -d --name container1 --network mynetwork nginx
docker run -d --name container2 --network mynetwork ubuntu
container2
에서 container1
에 접근할 때 container1
이라는 호스트명을 사용할 수 있습니다.
네트워크 연결 및 분리
# 네트워크에 연결
docker network connect mynetwork mycontainer
# 네트워크에서 분리
docker network disconnect mynetwork mycontainer
네트워킹 트러블슈팅
네트워킹 문제가 생겼을 때 가장 먼저 해야 할 것은 네트워크 연결 확인입니다.
-
컨테이너 내부에서 네트워크 연결을 확인
docker exec -it mycontainer ping google.com
-
네트워크 설정 확인
docker network inspect mynetwork
오늘의 한줄 평, 네트워킹은 이해도 어렵고 복잡하지만, 잘 활용해서 컨테이너의 독립적인 공간을, 네트워크를 통해 연결할 수 있다.