Docker Compose 네트워크

2025. 12. 31. 15:20Docker

🧩 Docker Compose 네트워크 자동 생성

ImageImage

 

0️⃣ 가장 중요한 포인트

 

Docker Compose는
“프로젝트 단위로 독립된 사용자 정의 bridge 네트워크를 자동 생성한다.”

이 문장을 이해하면 절반은 끝입니다.

 

1️⃣ docker compose up을 실행하면 무조건 일어나는 일

📌 docker-compose.yml

services:
  web:
    image: nginx
  api:
    image: openjdk:17

 

📌 실행

docker compose up

 

✅ Compose의 디폴트 동작 규칙

  1. 네트워크 정의가 없어도
  2. 자동으로 user-defined bridge 생성
  3. 도커 컴포즈의 모든 서비스는 그 네트워크에 자동 연결

2️⃣ 자동 생성되는 네트워크 이름 규칙 (중요)

🔑 디폴트 규칙

<프로젝트명>_default

 

프로젝트명은 어떻게 결정될까요?

우선순위 ⬇️

  1. -p 옵션
  2. COMPOSE_PROJECT_NAME
  3. 디렉터리 이름

📌 예시 ①

pwd
/home/user/myapp
docker compose up

 

➡️ 네트워크 이름:

myapp_default

 

📌 예시 ② (명시적 지정)

docker compose -p gopang up

 

➡️ 네트워크 이름:

gopang_default

 

3️⃣ 이 네트워크의 정체는?

default bridge(docker0)가 아닙니다

 

Compose가 만드는 네트워크는 항상:

  • ✔️ user-defined bridge
  • ✔️ Docker DNS 활성화
  • ✔️ 컨테이너 이름 기반 통신 가능
docker network inspect myapp_default

 

4️⃣ 서비스 이름 = DNS 이름 (Compose 핵심 규칙)

📌 예제

services:
  api:
    image: openjdk:17
  db:
    image: mysql

 

컨테이너 내부에서

ping db

 

✔️ 동작

curl http://api:8080

✔️ 동작

🔍 이유

  • Compose 네트워크에는 Docker DNS(127.0.0.11) 자동 설정
  • 서비스 이름 → IP 자동 매핑

➡️ IP 하드코딩은 설계 위반

 

5️⃣ 네트워크를 명시적으로 정의하면?

networks:
  backend:

services:
  api:
    networks: [backend]
  db:
    networks: [backend]

결과

  • 네트워크 이름:
  • <project>_backend
  • 여전히 자동 생성
  • 여전히 user-defined bridge

📌 명시적 정의 = 제어권 확보

 

6️⃣ 여러 네트워크를 정의하면 어떻게 될까?

networks:
  frontend:
  backend:

services:
  web:
    networks: [frontend]
  api:
    networks: [frontend, backend]
  db:
    networks: [backend]

구조

Client
  ↓
frontend ── web ── api ── backend ── db

 

📌 규칙 정리

항목 규칙
여러 네트워크 동시에 연결 가능
통신 가능 여부 같은 네트워크에 있을 때만
api 브릿지 역할 가능
db frontend 접근 ❌

➡️ 네트워크 레벨 보안 완성

 

7️⃣ 외부 네트워크(external) 지정 시 규칙 변화

networks:
  backend:
    external: true

의미

  • Compose가 생성하지 않음
  • 이미 존재하는 네트워크 사용
docker network create backend
docker compose up

📌 없으면?
➡️ 에러 발생

 

8️⃣ Compose down 시 네트워크는?

docker compose down

 

디폴트 동작

대상 결과
컨테이너 삭제
네트워크 삭제
볼륨 ❌ 유지

👉 단, external: true 네트워크는 절대 삭제 안 됨

 

9️⃣ default network를 끄는 경우는?

services:
  api:
    networks: [backend]

networks:
  backend:

📌 이 경우:

  • _default 네트워크 ❌ 생성 안 됨
  • 오직 backend만 생성

10️⃣ 실무에서 반드시 기억해야 할 핵심 규칙 요약

🧠 Compose 네트워크 7대 규칙

  1. Compose는 항상 user-defined bridge를 만든다
  2. default bridge(docker0)는 절대 사용 안 함
  3. 네트워크 이름 = <project>_<network>
  4. 서비스 이름 = DNS 이름
  5. 같은 네트워크만 통신 가능
  6. 여러 네트워크 연결 가능
  7. external: true면 생성·삭제 안 함

🎯 핵심 문장

Docker Compose는
프로젝트 단위의 사용자 정의 bridge 네트워크를 자동 생성하고,
서비스 이름 기반의 DNS 통신을 기본 전제로 한다.

 

🔥 한 줄 요약

Compose를 쓰는 순간,
“네트워크를 설계 안 해도 이미 잘 설계된 네트워크 위에서 동작한다.”

'Docker' 카테고리의 다른 글

DockerFile  (0) 2025.12.31
디폴트 브릿지 vs 사용자 정의 브릿지  (0) 2025.12.31
Docker Network  (0) 2025.12.31
Union File System & Overlay File System  (0) 2025.12.31
Spring Boot 앱의 JAR 파일 구조  (0) 2025.12.30