Docker Compose에서 여러 Container를 운영하려면 Container끼리 서로 통신할 수 있는 네트워크 구성이 필요합니다.
예를 들어 실제 서버 환경은 하나의 Container만 실행하지 않습니다.
일반적인 구조:
사용자
↓
Nginx Container
↓
Application Container
↓
Database Container
↓
Redis Container
이처럼 여러 서비스가 연결되어 동작하기 때문에 Docker Network 이해는 필수입니다.
Docker Compose는 기본적으로 Service들을 위한 Network를 자동 생성합니다.
구조:
docker-compose.yml
↓
Docker Network 생성
↓
Container 연결
↓
Service 간 통신
이번 글에서는 Docker Compose Network의 기본 개념부터 기본 Network, Custom Network, Container 간 통신, 외부 Network 연결, Production 서버 네트워크 구성 방법까지 알아보겠습니다.
Docker Compose Network란 무엇인가?
Docker Network는 Docker Container들이 서로 통신할 수 있도록 연결하는 가상 네트워크입니다.
기본 구조:
Host Server
↓
Docker Network
↓
Container
Container는 기본적으로 독립된 환경에서 실행됩니다.
예:
Container A
X
Container B
기본 상태에서는 서로 직접 통신할 수 없습니다.
Network 연결 후:
Container A
↓
Docker Network
↓
Container B
서로 Service 이름으로 통신할 수 있습니다.
Docker Compose 기본 Network 자동 생성
Docker Compose를 실행하면 자동으로 Network가 생성됩니다.
예:
docker-compose.yml
services:
app:
image: node
database:
image: mysql
실행:
docker compose up -d
자동 생성:
프로젝트명_default Network
↓
app Container 연결
↓
database Container 연결
확인:
docker network ls
결과:
project_default
Docker Compose Container 간 통신 방법
Docker Compose에서는 IP 주소 대신 Service 이름을 사용하는 것이 일반적입니다.
예:
services:
app:
image: my-app
database:
image: mysql
Application 설정:
DB_HOST=database
동작:
app Container
↓
database 이름 검색
↓
MySQL Container 연결
중요:
IP 주소 사용:
172.18.0.2
비추천
Service 이름 사용:
database
권장
이유:
- Container 재생성 시 IP 변경
- 관리 편리
- 자동 DNS 지원
Docker Compose Network 확인 방법
Network 목록 확인:
docker network ls
상세 정보:
docker network inspect 네트워크명
확인:
- 연결된 Container
- IP 정보
- Driver
- 설정 정보
예:
docker network inspect project_default
결과:
Containers:
app
database
Docker Compose Custom Network 만들기
기본 Network 대신 직접 Network를 정의할 수 있습니다.
예:
services:
app:
image: my-app
networks:
- backend
database:
image: mysql
networks:
- backend
networks:
backend:
구조:
backend Network
↓
app Container
↓
database Container
장점:
- 네트워크 이름 관리
- 서비스 분리
- 보안 강화
Docker Compose 여러 Network 사용하기
하나의 Container는 여러 Network에 연결할 수 있습니다.
예:
services:
nginx:
image: nginx
networks:
- frontend
- backend
app:
image: my-app
networks:
- backend
networks:
frontend:
backend:
구조:
Internet
↓
frontend Network
↓
Nginx
↓
backend Network
↓
Application
↓
Database
실제 Production 환경에서 많이 사용하는 구조입니다.
Docker Compose Network와 보안 구성
모든 Container를 같은 Network에 넣으면 편하지만 보안상 좋지 않을 수 있습니다.
잘못된 구조:
Internet
↓
Nginx
↓
Database
↓
Redis
모든 서비스 노출
좋은 구조:
Internet
↓
Frontend Network
↓
Nginx
↓
Backend Network
↓
Application
↓
Database Network
↓
Database
서비스별 Network를 분리하면 접근 범위를 제한할 수 있습니다.
Docker Compose external Network 사용하기
기존 Docker Network를 사용할 수도 있습니다.
먼저 생성:
docker network create shared-network
docker-compose.yml:
services:
app:
image: my-app
networks:
- shared-network
networks:
shared-network:
external: true
활용:
- 여러 Compose 프로젝트 연결
- 공용 Proxy 구성
- 공용 Database 연결
Docker Compose Network Driver 종류
Docker Network에는 여러 Driver가 있습니다.
bridge
가장 기본적인 Network입니다.
사용:
일반 Container 환경
Compose 기본값입니다.
host
Host Network를 직접 사용합니다.
특징:
- 빠른 통신
- Port 관리 필요
overlay
여러 Docker Host 연결용입니다.
사용:
- Docker Swarm
- 분산 환경
Docker Compose Network DNS 기능
Docker Compose Network는 내부 DNS 기능을 제공합니다.
예:
Service:
services:
mysql:
image: mysql
Application:
mysql
주소 사용 가능
흐름:
app
↓
mysql 이름 조회
↓
Container 연결
별도의 IP 설정이 필요 없습니다.
Docker Compose Network 실무 예제
Production 기본 구조:
services:
nginx:
image: nginx
ports:
- "80:80"
networks:
- frontend
app:
image: my-app
networks:
- frontend
- backend
database:
image: mysql:8
networks:
- backend
networks:
frontend:
backend:
구조:
사용자
↓
Nginx
↓
Frontend Network
↓
Application
↓
Backend Network
↓
Database
Docker Compose Network 장애 해결 방법
Container 통신 실패
확인:
docker network inspect 네트워크명
확인:
- Container 연결 여부
- Network 이름
- Service 이름
Database 연결 오류
확인:
DB_HOST 설정
잘못된 예:
DB_HOST=localhost
올바른 예:
DB_HOST=database
이유:
Container 내부 localhost는 자기 자신을 의미합니다.
Network 재생성
문제 발생 시:
docker compose down
docker compose up -d
Network가 다시 생성됩니다.
Docker Compose Network 운영 Best Practice
추천:
- Service 이름으로 통신
- IP 직접 사용 금지
- Frontend / Backend Network 분리
- Database 외부 공개 금지
- Custom Network 사용
- Production 환경에서는 구조화된 Network 설계
운영 구조:
Public Network
↓
Nginx
↓
Private Network
↓
Application
↓
Database
자주 묻는 질문
Docker Compose는 Network를 자동 생성하나요?
네.
기본 실행 시 프로젝트 전용 Network가 자동 생성됩니다.
Container끼리 어떻게 연결하나요?
같은 Network에 있으면 Service 이름으로 통신합니다.
IP 주소를 사용하면 안 되나요?
가능하지만 Container 재생성 시 변경될 수 있어 권장하지 않습니다.
Production 서버에서도 Network 분리가 필요한가요?
필요합니다.
서비스별 접근 범위를 제한하면 보안성이 향상됩니다.
마무리
Docker Compose Network는 여러 Container를 연결하는 핵심 기술입니다.
Service 이름 기반 통신, Custom Network, Frontend와 Backend 분리 구조를 이해하면 실제 서버 환경에서 안정적인 Container 아키텍처를 구성할 수 있습니다.
다음 글에서는 Docker Compose에서 데이터를 안전하게 보존하기 위한 핵심 기능인 Volume 관리 방법을 다룹니다.