docker 환경 구성을 하다보면 port, network 설정 등을 하게되는데,
port는 내 컴퓨터와 컨테이너를 연결해주는것.. network는 컨테이너끼리 통신할 수 있게 해주는 것..
정도로만 얘기할 수 있기에, 두 가지 개념에 대한 이해가 부족하다고 느꼈다.
그래서 이번 포스팅에서는 port, network 와 같은 개념에 대해서 짚어보고,
이를 기반으로 실습용으로 작성한 docker-compose.yaml 파일을 이해해보고자 한다.

Port + Docker
Port 란?
하나의 컴퓨터에는 여러개의 서버가 설치될 수 있음. 클라이언트가 컴퓨터와 접속할 때 어떤 서버와 접속하려고 하는지 구분할 수 있는 방법이 필요한데, 이때 이를 구분해주는 수단이 포트임.
비유로 들자면,
컴퓨터가 건물이라고 했을 때,
- IP주소 = 건물 주소
- 포트 = 방번호임.
같은 건물 (IP)안에서도 어떤 방(포트)로 가느냐에 따라 만나는 서비스가 달라짐.

- 포트는 0~65535까지 있음.
- 0~1023번까지의 포트는 well-known port 즉 예약되어있는 포트로, 사용할 수 없음.
- 80번 포트는 http, 즉 웹페이지와 통신할 때 사용하도록 약속되어있음.
- 1023~65535까지 비어있는 포트를 아무거나 사용하면 됨.
- 자주 쓰는 포트는 다음과 같음.
| 포트 | 서비스 |
| 80 | HTTP |
| 443 | HTTPS |
| 5432 | PostgreSQL |
| 3306 | MySQL |
| 6379 | Redis |
| 8080 | 개발용 웹 서버 |
| 3000 | React / Node |
Docker에서 Port
Docker에서는 컴퓨터가 두 겹이라고 생각하면 됨.
[내 컴퓨터]
└─ 5432 ← 내가 접속하는 포트
↓
[Docker 컨테이너]
└─ 5432 ← 실제 Postgres가 듣고 있는 포트
그래서 나오는 게 -p 5432:5432 이 문법임.
-p 5432:5432 은 내 컴퓨터의 5432번 포트로 들어온 요청을, 컨테이너 안의 5432번 포트로 보내달라는 의미임.
Network + Docker
Network란?
네트워크는 여러 컴퓨터(또는 프로그램)가 서로 데이터를 주고받을 수 있도록 연결된 구조임.
다시 한번 비유로 들자면,
컴퓨터가 건물이라고 했을 때,
- IP주소 = 건물 주소
- 포트 = 방번호
- 네트워크 = 건물 간 도로
즉 도로(네트워크)가 없으면, 건물이 있어도 서로 연결될 수 없음. 즉 통신이 불가능함.
Docker에서 Network
로컬에서 작업할 때와 달리, Docker에선 컨테이너끼리 통신할 때엔 port를 사용하지 않아도 되는데,
그 이유가 docker 내 컨테이너들은 이미 사설 네트워크로 직접 연결되어있기 때문임.
[내 컴퓨터]
└─ localhost:5432
|
| (포트 매핑 -p)
|
[Docker Network (bridge)]
├─ app-container (IP: 172.18.0.2)
└─ db-container (IP: 172.18.0.3)
└─ Postgres :5432
Docker Network내에서 app과 db container는 네트워크를 통해 통신하고,
db conainer는 내 컴퓨터의 localhost와 통신하기 위해 port로 연결함.
- Docker에선 목적에 따라 다양한 종류의 네트워크 드라이버를 지원함.
- Docker Network 신규 생성 시엔, bridge 네트워크로 자동 설정됨.
| 네트워크 종류 | 설명 | 주 사용처 | 포트 매핑 필요 여부 | 특징 |
| bridge | Docker가 만드는 기본 사설 네트워크 | 단일 서버, 로컬 개발 | 외부 접근 시 필요 | 컨테이너끼리 이름으로 통신 가능 |
| host | 호스트 네트워크를 그대로 사용 | 고성능 네트워크, 디버깅 | ❌ | 포트 충돌 위험 큼 |
| none | 네트워크 완전 차단 | 보안 테스트, 배치 | ❌ | 외부/내부 통신 모두 불가 |
Docker Compose 파일 이해하기
services:
pgdatabase:
image: postgres:18
environment:
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "root"
POSTGRES_DB: "ny_taxi"
volumes:
- "ny_taxi_postgres_data:/var/lib/postgresql"
ports:
- "5432:5432"
pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: "admin@admin.com"
PGADMIN_DEFAULT_PASSWORD: "root"
volumes:
- "pgadmin_data:/var/lib/pgadmin"
ports:
- "8085:80"
volumes:
ny_taxi_postgres_data:
pgadmin_data:
- 해당 프로젝트는 pgdatabase, pgadmin 컨테이너로 구성되어 있음.
- 두 컨테이너는네트워크를 따로 지정해주지 않아도 동일 네트워크 선 상에서 실행됨. 해당 파일 실행 시, Docker 는 자동으로 bridge 네트워크를 생성함.
<pgdatabase 컨테이너>
- pgdatabase 컨테이너는 데이터 저장 전용 컨테이너
- volumes(데이터 영속성)를 설정하여 컨테이너가 삭제되도 데이터는 var/lib/postgresql에 유지하도록 설정함.
- 내 컴퓨터의 5432번 포트와 pgdatabase의 컨테이너 5432포트를 연결하여, 로컬에서 직접 DB에 접근할 수 있도록 함. (pgadmin만 사용할거라면 사실 없어도 됨)
<pgadmin 컨테이너>
- pgadmin은 웹 기반으로 DB를 관리하기 위한 컨테이너
- 컨테이너가 삭제되도 pgadmin에 대한 사용자 설정이 유지되도록 함.
- 내 컴퓨터의 8085번 포트와 컨테이너의 80번 포트를 연결하여, 컨테이너에서 웹 접근을 할 수 있도록 함.
참고자료
[port]
https://opentutorials.org/course/3265/20037
[network]
https://velog.io/@mingle-mongle/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
https://www.daleseo.com/docker-networks/?utm_source=chatgpt.com
'Data > 데이터 엔지니어링' 카테고리의 다른 글
| OLAP & Data Warehouse (0) | 2026.02.08 |
|---|---|
| BigQuery With Partitioning & Clustering (0) | 2026.02.08 |
| ELT vs ETL 언제 사용하면 좋을까? (0) | 2026.02.02 |
| Workflow Orchestration / Kestra 알아보기 (0) | 2026.01.30 |