logoRawon_Log
홈블로그소개

Built with Next.js, Bun, Tailwind CSS and Shadcn/UI

Docker

Docker - 네트워크

Rawon
2025년 9월 11일
목차
Network
네트워크
네트워크 인터페이스 / 포트
DNS
Docker 가상 네트워크
가상 네트워크 구성
포트 포워딩

목차

Network
네트워크
네트워크 인터페이스 / 포트
DNS
Docker 가상 네트워크
가상 네트워크 구성
포트 포워딩

Network

네트워크

네트워크는 여러 개의 장치들이 서로 연결되어 정보를 주고 받을 수 있는 통신망입니다.

물리적으로는 LAN 케이블을 통해 연결되어 있고 이를 통해 전기신호로 정보를 주고 받습니다.

다른 대륙의 나라와도 해저 케이블을 통해 연결되어 있어 이를 통해 정보를 주고 받을 수 있습니다.

정보를 주고 받기 위해선 목적지의 주소가 필요합니다.

네트워크 환경에서는 IP주소를 활용해서 컴퓨터나 기기들이 서로를 찾고 통신할 수 있습니다.

보통 집에서 휴대폰, PC, TV 등 하나의 IP로 여러 기기가 인터넷을 사용하는데 이를 위해서는 사설 IP를 사용해야 합니다.

  • 공인IP(=집 주소) : 전 세계에서 유일
  • 사설IP(=방 번호) : 집 내에서 유일

즉, IP는 외부에서 사용하는 공인IP와 내부에서만 사용하는 사설 IP로 구분할 수 있습니다.

이를 기업 환경에 맞춰서 비유를 해보자면 공인IP는 외부 네트워크를 사용한 통신망인 공인망 이며,

사설IP는 기업 내부 네트워크 통신망인 사설망 에서 사용한다고 볼 수 있습니다.

일반적으로 기업에서는 하나의 공인IP를 가지고 외부 서버와 통신하며, 라우터 장비를 통해 사설IP를 분배합니다.

네트워크 인터페이스 / 포트

다음은 네트워크 인터페이스 는 인터넷에 연결하기 위해 컴퓨터에 장착하는 부품 중 하나이며, IP 주소를 갖고 있습니다. 보통 하나의 컴퓨터에는 1개 이상의 인터페이스가

포트 는 물리적으로 존재하진 않지만 서버 안에서 정의해서 사용하며, : 뒤에 포트번호를 붙여 사용할 소프트웨어의 방 번호를 지정하는 것과 같은 의미로 볼 수 있습니다.

일반적으로 네트워크를 사용하는 프로그램은 자기가 사용할 포트를 지정할 수 있습니다.

웹서버 : 80(http), 443(https)
SSH : 22
FTP : 21

정리하면, IP는 공인IP와 사설IP로 나눌 수 있으며, 공인IP끼리의 통신을 공인망, 이 공인망에서 라우터를 사용해서 만들어진 내부 네트워크망을 사설망이라고 할 수 있습니다.

그리고 공인망에 있는 서버들과 사설망에 있는 기기들이 통신하기 위해서 NAT와 포트포워딩 기술을 활용합니다.

DNS

DNS는 Domain Name System 의 줄임말입니다.

보통 네이버와 같은 페이지에 접속할 때, 사람들은 www.naver.com 과 같은 주소를 검색합니다. 이러한 주소를 도메인 주소 라고 하며, 이 영문으로 된 도메인 주소와 실제 IP 주소를 맵핑해주는 맵핑 정보가 있는데

이런 정보를 갖고 있는 것이 DNS 입니다.

그래서 이를 통해 영문으로 주소를 입력해도 해당 되는 IP 주소로 찾아가서 웹 페이지를 제공받을 수 있는 것 입니다.

예를 들어 사용자가 www.naver.com 이라는 주소를 주소창에 입력하면 브라우저는 먼저 DNS에 해당 도메인과 맵핑된 IP를 확인하고 해당 IP로 요청을 보냅니다.

그러면 해당 IP의 웹서버로부터 페이지를 응답으로 제공 받아 브라우저에 표시가 되게 됩니다.

즉, 실제 통신은 IP 주소를 사용해서 이루어지지만 사람이 사용하기 편리한 도메인 주소를 사용하는 것이 일반적이며, 도메인 네임과 IP 주소를 맵핑해주는 시스템을 DNS라고 부릅니다.


Docker 가상 네트워크

컨테이너 가상화 기술은 서버 한대를 여러 대의 컨테이너로 격리하는 기술 입니다.

이와 마찬가지로 가상 네트워크 또한 서버 한대 안에서 여러 네트워크를 구성하는 기술입니다.

그리고 이 네트워크 망 안에서 컨테이너들이 서로 통신할 수 있고 내부의 컨테이너와 바깥의 서버와도 통신할 수 있습니다.

예를 들어 현재 제가 사용하는 PC에는 사설IP가 할당되어 있을 겁니다.

그리고 제 PC에서 도커의 가상화 기술을 사용해 내부에 여러 개의 컨테이너를 실행시킨다고 가정했을 때,

각각 컨테이너들의 IP는 어떻게 정의되고 이들 간의 통신 뿐 아니라 외부 네트워크와 컨테이너의 연결 등과 같은 이러한 요구사항들은 Docker의 가상 네트워크 기술 을 사용해서 해결할 수 있습니다.

도커는 가상 네트워크 기술을 활용해서 컨테이너의 네트워크를 구성합니다.

이는 실제로 인터넷 선이나 공유기가 없이 오로지 1대의 서버 내에서 논리적으로 정의되어 있는 네트워크이기 때문에 가상 네트워크라 부릅니다.

가상 네트워크 구성

Docker를 설치하고 실행시키면 Docker는 가상의 네트워크인 브릿지 네트워크와 가상의 공유기인 docker0 를 만듭니다.

이때, 이 docker0 을 도커에서는 브릿지 라고 부릅니다.

이 브릿지는 가상의 IP 주소를 할당 받는데, 보통 172.17.0.1 과 같은 IP를 할당 받습니다.

이 IP는 실제로 존재하는 IP 주소가 아닌 도커를 실행시킨 PC 안에서 논리적으로 정의되어 있는 가상의 IP 입니다.

그리고 나서 컨테이너를 실행하면 Docker는 브릿지 네트워크 의 IP 주소 범위 안에서 IP주소를 하나 할당해줍니다.

마치 공유기에 연결된 기기 한대에 사설 IP가 할당되는 것과 동일합니다.

여러 컨테이너를 실행하면 각각의 컨테이너들은 같은 대역대에서 겹치지 않는 IP를 할당 받습니다.

이렇게 같은 브릿지 에서 생성된 네트워크는 브릿지를 통해서 서로 통신할 수 있습니다.

💡 Docker는 컨테이너의 통신을 위해서 브릿지 네트워크를 정의하고 Host OS에 가상 인터페이스를 생성합니다.
그리고 Host OS의 IPtables 라는 것을 통해 규칙을 관리하면서 가상 인터페이스들 간의 통신 규칙을 만듭니다.
그래서 사용자는 별도의 설정을 하지 않아도 같은 브릿지 네트워크에서 생성된 컨테이너들은 서로 통신을 할 수 있는 상태로 구성됩니다.

그리고 Docker는 이 가상 네트워크 내부에서 여러 개의 브릿지 네트워크를 관리할 수 있습니다.

기본적으로 같은 네트워크 안에 속해 있는 컨테이너들끼리 통신이 가능하기 때문에 브릿지 네트워크 단위로 분리하게 되면 특정 컨테이너들끼리는 통신이 되지 않도록 구성할 수도 있는 것 입니다.

docker
# 네트워크 리스트 조회
docker network ls

# 네트워크 상세 정보 조회
docker network inspect 네트워크명

# 네트워크 생성
# --bridge : 브릿지 드라이버 사용
# --gateway : 원하는 gatewoy 주소 입력 가능
docker network create 네트워크명

# 네트워크 삭제
docker network rm 네트워크명

포트 포워딩

docker
# docker run -p 80:80
docker run -p HostOS의포트:컨테이너포트

위와 같은 컨테이너 실행 명령을 사용할 때 -p 옵션을 사용해서 포트를 지정하는데 : 을 기준으로

좌측은 내 PC인 Host OS의 포트를 지정하고 우측은 컨테이너가 사용하는 포트를 의미합니다.

만약 Nginx 웹 서버를 컨테이너로 실행시킨다고 가정하면

  1. 컨테이너 내부 : nginx가 컨테이너 안에서 포트 80번으로 웹서비스를 제공
  2. 포트 매핑 : Docker가 “로컬PC의 80번 포트로 들어오는 요청을 컨테이너의 80번 포트로 전달해줄게!”
  3. 외부 접근 : 브라우저에서 localhost:80 과 같은 식으로 접근하면 컨테이너의 nginx에 도달

💡 **포트 포워딩이 필요한 이유

컨테이너는 기본적으로 격리된 환경입니다.
포트 맵핑 없이는 컨테이너 내부에서 서비스가 정상 동작 중이라도 외부에서는 접근할 수 없기 때문입니다.**

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/CigvZ