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을 통해 내부 통신과 데이터 영속성을 보장하는 구조입니다.
'컨테이너·워크플로우 자동화 > DocKer 기본 및 활용' 카테고리의 다른 글
| Dockerfile Shell 형식과 Exec 형식의 개념 (0) | 2026.02.18 |
|---|---|
| Docker Compose depends_on의 동작 원리와 한계 (0) | 2026.02.18 |
| COPY(명령어)에서 / 유무에 따른 디렉토리 복사 차이 (0) | 2026.02.17 |
| Docker 컨테이너가 즉시 종료되는 이유와 디버깅을 위한 ENTRYPOINT 활용 방법 (0) | 2026.02.17 |
| Docker RUN 명령어와 && 사용 이유: 레이어 구조 관점에서 이해하기 (0) | 2026.02.17 |