컨테이너·워크플로우 자동화/DocKer 기본 및 활용

Docker Compose 구성 이해하기

Data Jun 2026. 2. 18. 00:58
name: mbti   # Compose 프로젝트 이름 지정 (네트워크/볼륨 이름 prefix 관리용)

services:
  app:
    image: [계정명]/mbti:mysql   # 빌드 결과 이미지에 붙일 이름(태그), 추후 push 가능
    build:
      args:
        - NODE_VERSION=20.15.1   # Dockerfile에서 사용할 빌드 인자 전달 (Node 버전 고정)
      dockerfile: ./Dockerfile  # 사용할 Dockerfile 경로 지정
      pull: true                # base 이미지 항상 최신 상태로 pull
      context: .                # 현재 디렉토리를 빌드 컨텍스트로 사용
    container_name: app         # 컨테이너 이름 명시 (자동 생성 방지)
    environment:
      - PORT=3000               # 앱 내부 실행 포트
      - DB_HOST=db              # DB 컨테이너 서비스명으로 연결 (DNS 자동 인식)
      - DB_PORT=3306            # MySQL 기본 포트
      - DB_NAME=db_mbti         # 사용할 데이터베이스 이름
      - DB_USERNAME=user_mbti   # DB 접속 계정
      - DB_PASSWORD=pw_mbti     # DB 접속 비밀번호
    networks:
      - mbti-net                # 동일 네트워크 내에서 컨테이너 간 통신
    ports:
      - 3001:3000               # 외부 3001 → 내부 3000 포트 매핑

  db:
    image: mysql:8.3.0          # 공식 MySQL 이미지 사용
    container_name: db          # 컨테이너 이름 고정
    environment:
      - MYSQL_ROOT_PASSWORD=root1234   # root 계정 비밀번호
      - MYSQL_DATABASE=db_mbti         # 초기 생성 DB
      - MYSQL_USER=user_mbti           # 기본 사용자 생성
      - MYSQL_PASSWORD=pw_mbti         # 사용자 비밀번호
    networks:
      - mbti-net                # app과 동일 네트워크에서 통신
    volumes:
      - mbti-vol:/var/lib/mysql # DB 데이터 영속성 보장 (컨테이너 삭제 시에도 유지)

networks: # 사용자 정의 네트워크 생성
  mbti-net: # Compose 식별 키
    name: mbti-net              # 네트워크 이름 고정 (재사용 및 식별 용이)

volumes: # 도커 볼륨(Named) 생성
  mbti-vol:  Compose 식별 키
    name: mbti-vol              # MySQL 데이터 저장용 볼륨 이름 고정

이 파일을 기준으로 블로그 내용을 정리해보겠습니다.

 

1. 누가 컨테이너를 실제로 띄우는가?

docker compose up

이 명령이:

  • build 수행
  • image pull
  • network 생성
  • volume 생성
  • 컨테이너 실행

을 모두 수행합니다.

Compose 파일은 설계도이고,
실행 주체는 docker compose up입니다.

 

2. image 옵션

image: [계정명]/mbti:mysql

 

현재 구조에서는:

build:
  context: .

이 있기 때문에

  • Dockerfile로 이미지 빌드
  • 빌드 결과에 [계정명]/mbti:mysql 태그를 붙임
  • 그 이미지를 실행

즉,

build = 생성 과정
image = 결과 이름(태그)

 

3. container_name 옵션

container_name: app
  • 컨테이너는 docker compose up이 생성
  • container_name은 생성될 컨테이너 이름을 고정

없으면 자동으로:

mbti-app-1

 

형태로 생성됩니다.

 

4. networks는 무엇을 만드는가?

networks:
  mbti-net:
    name: mbti-net

이 설정은:

  • 사용자 정의 bridge 네트워크 생성
  • app과 db를 같은 네트워크에 연결

첫 번째 mbti-net → Compose 내부 식별자
name: → 실제 Docker 네트워크 이름

 

덕분에(같은 네트워크를 사용하기 때문에 DNS 이름 사용 가능함):

DB_HOST=db

처럼 서비스명으로 통신이 가능합니다.

 

5. volumes는 무엇을 만드는가?

volumes:
  mbti-vol:
    name: mbti-vol

Docker가 관리하는 named volume을 생성합니다.

 

MySQL에서:

- mbti-vol:/var/lib/mysql

→ DB 데이터를 컨테이너 외부에 저장
→ 컨테이너 삭제해도 데이터 유지

 

첫 번째 이름 → Compose 내부 식별자
name: → 실제 Docker 볼륨 이름

 

6. Compose 구조의 전체 흐름

  • Dockerfile로 app 이미지 빌드
  • MySQL 공식 이미지 pull
  • mbti-net 네트워크 생성
  • mbti-vol 볼륨 생성
  • app, db 컨테이너 생성 및 실행
  • app은 db를 서비스명으로 접근

실행 시 내부 동작은 다음과 같습니다.

 

7. 정리

Docker Compose는 여러 컨테이너(app, db)를 하나의 네트워크와 볼륨 환경 안에서 묶어 실행하는 오케스트라 지휘자 역할을 한다.

이 Compose 구성은 Dockerfile로 app 이미지를 빌드하고, MySQL 컨테이너를 함께 실행하며, 사용자 정의 네트워크와 named volume을 통해 내부 통신과 데이터 영속성을 보장하는 구조입니다.