Data/데이터 엔지니어링

Docker + port & network 이해하기

빛날희- 2026. 1. 26. 23:23
728x90

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

https://sean-lets-go.tistory.com/65?utm_source=chatgpt.com#article-1-0-2--%F0%9F%91%89-%EB%8F%84%EC%BB%A4-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%83%9D%EC%84%B1

728x90