목표

더보기
  • 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 구성 요소 설명

더보기
(1) version
 
version: "3.9"
  • Compose 파일 형식 버전
  • 최근에는 사실상 관례적 요소
 
 
 
(2) services:
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 네트워크 정리
  • 실행 환경 초기화