Docker Compose 네트워크
2025. 12. 31. 15:20ㆍDocker
🧩 Docker Compose 네트워크 자동 생성


0️⃣ 가장 중요한 포인트
Docker Compose는
“프로젝트 단위로 독립된 사용자 정의 bridge 네트워크를 자동 생성한다.”
이 문장을 이해하면 절반은 끝입니다.
1️⃣ docker compose up을 실행하면 무조건 일어나는 일
📌 docker-compose.yml
services:
web:
image: nginx
api:
image: openjdk:17
📌 실행
docker compose up
✅ Compose의 디폴트 동작 규칙
- 네트워크 정의가 없어도
- 자동으로 user-defined bridge 생성
- 도커 컴포즈의 모든 서비스는 그 네트워크에 자동 연결
2️⃣ 자동 생성되는 네트워크 이름 규칙 (중요)
🔑 디폴트 규칙
<프로젝트명>_default
프로젝트명은 어떻게 결정될까요?
우선순위 ⬇️
-p옵션COMPOSE_PROJECT_NAME- 디렉터리 이름
📌 예시 ①
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대 규칙
- Compose는 항상 user-defined bridge를 만든다
- default bridge(docker0)는 절대 사용 안 함
- 네트워크 이름 =
<project>_<network> - 서비스 이름 = DNS 이름
- 같은 네트워크만 통신 가능
- 여러 네트워크 연결 가능
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 |