5. Docker Compose로 배포 표준화

목표
- docker run 명령어 기반 실행의 한계를 설명할 수 있다
- Docker Compose의 역할과 필요성을 이해한다
- docker-compose.yml 파일의 구조를 이해한다
- 서버 실행 설정을 파일로 문서화할 수 있다
- 팀 또는 교육 환경에서 동일한 서버 실행을 보장할 수 있다
1. Docker Compose 개요
(1) docker run 기반 실행의 한계
docker run -d -p 8888:8888 chat-server
이 방식은 단일 실습에서는 문제가 없지만, 팀·배포 환경에서는 다음과 같은 한계가 발생합니다.

| 문제 | 설명 |
| 명령어 의존 | 실행 방법이 터미널 히스토리에만 남음 |
| 재현 어려움 | 옵션 하나만 빠져도 실행 결과가 달라짐 |
| 문서화 한계 | 실행 조건을 설명으로 풀어 써야 함 |
| 확장성 부족 | 컨테이너가 늘어날수록 관리 불가 |
| 교육 비효율 | 학생마다 실행 명령이 달라질 수 있음 |
(2) Docker Compose란 무엇인가?
Docker Compose는 여러 컨테이너 실행 설정을 하나의 YAML 파일로 정의하고 동일한 방식으로 실행하기 위한 도구이다.
- 구성(Configuration)
- 표준화(Standardization)
- 재현성(Reproducibility)
(3) Docker Compose를 사용하는 이유: “서버 실행 설명서 + 실행 도구” 역할을 동시에 수행합니다.
- 서버 실행 옵션을 파일로 고정
- 실행 명령어를 단순화
- 팀원/학생 모두 동일한 실행 결과 보장
- 서버 구조를 한눈에 파악 가능
2. docker-compose.yml

(1) docker-compose.yml 파일은 다음을 정의합니다.
- 어떤 이미지를 사용할 것인가
- 어떤 포트를 열 것인가
- 어떤 환경 변수를 사용할 것인가
- 컨테이너 이름은 무엇인가
- 백그라운드 실행 여부
(2) 최소 docker-compose.yml 예제(서버 1개)
version: "3.9"
services:
chat-server:
image: chat-server
container_name: chat-server
ports:
- "8888:8888"
ㄴ 2.1 docker-compose.yml 구성 요소 설명
version: "3.9"
- Compose 파일 형식 버전
- 최근에는 사실상 관례적 요소
services:
- 실행할 컨테이너 목록 정의
- 하나의 서비스 = 하나의 컨테이너(일반적)
(3) service 이름
chat-server:
- 서비스 식별자
- 실행 및 관리 시 사용
(4) image
image: chat-server
- 사용할 Docker 이미지 이름
- Dockerfile로 빌드된 이미지 사용
(5) container_name
container_name: chat-server
- 실제 컨테이너 이름 고정
- docker ps, docker logs 사용 시 편의성 증가
(6) ports
ports:
- "8888:8888"
- 호스트 포트 : 컨테이너 포트
- docker run -p 옵션과 동일한 의미
ㄴ 2.2 Docker Compose 실행 방법
(1) 서버 실행
docker compose up
(2) 또는 백그라운드 실행:
docker compose up -d
(3) 서버 중지
docker compose down
3. [실습] docker-compose.yml 작성
(1) 실습 목표
- 서버 실행 설정을 docker-compose.yml 파일 작성하세요.
(2) 실습 지시
다음 요구사항을 만족하는 docker-compose.yml을 작성하세요.
- 서비스 이름: chat-server
- 이미지 이름: chat-server
- 컨테이너 이름: chat-server (고정)
- 포트 매핑: 8888 → 8888
(3) 작성 예시 (정답)
version: "3.9"
services:
chat-server:
image: chat-server
container_name: chat-server
ports:
- "8888:8888"
(4) 항목별 해설
- version: Docker Compose 파일 형식 버전(관례적 요소)
- services: 실행할 컨테이너 목록
- chat-server: 서비스 이름
- image: 사용할 Docker 이미지
- container_name: 실제 컨테이너 이름 고정
- ports: 호스트 포트와 컨테이너 포트 연결
4. [실습] Compose 기반 서버 실행
(1) 실습 개요
이 실습에서는 앞에서 작성한 docker-compose.yml 파일을 사용해
실제로 서버를 실행하고 상태를 확인합니다.
(2) 실습 목표
- Docker Compose로 서버를 실행할 수 있다.
- 실행 중인 컨테이너 상태를 확인할 수 있다.
- 서버 로그를 Docker 명령으로 확인할 수 있다.
(3) 실습 단계
1단계. 서버 실행
docker compose up -d
- up: docker-compose.yml에 정의된 서비스 실행
- -d: 백그라운드 실행(터미널 점유하지 않음)
2단계. 컨테이너 상태 확인
docker ps
- 컨테이너 이름이 chat-server 인가?
- STATUS가 Up 상태인가?
3단계. 서버 로그 확인
docker logs chat-server
- 서버 시작 로그가 출력되는가?
- 오류 메시지는 없는가?
4단계. 확인
- 컨테이너가 Running 상태인가?
- 포트 8888이 정상적으로 열려 있는가?
- 서버 로그가 정상적으로 출력되는가?
5단계. 실습 종료(정리)
docker compose down
- 실행 중인 컨테이너 중지
- Docker Compose 네트워크 정리
- 실행 환경 초기화