Docker Compose Network 구성 완벽 가이드! Container 간 통신과 서비스 연결 구조 이해하기

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 관리 방법을 다룹니다.

댓글 남기기