티스토리 뷰

Docker & AWS

[Docker 3] Docker Compose

up_one 2025. 7. 5. 13:22

2025.06.29 - [Docker & AWS] - [Docker 1] Docker의 장점과 Image

 

[Docker 1] Docker의 장점과 Image

https://hub.docker.com/_/docker docker - Official Image | Docker HubDocker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and ar

up-one-coding.tistory.com

2025.07.02 - [Docker & AWS] - [Docker 2] Container

 

[Docker 2] Container

2025.06.29 - [Docker & AWS] - [Docker 1] Docker의 장점과 Image [Docker 1] Docker의 장점과 Imagehttps://hub.docker.com/_/docker docker - Official Image | Docker HubDocker Official Images are a curated set of Docker open source and drop-in solution r

up-one-coding.tistory.com

이번 글에서는 여러 컨테이너를 정의하고 관리할 수 있는 Docker Compose에 대해 알아보겠습니다. 복잡한 애플리케이션 (ex :  웹 서버 + 데이터베이스 + 백엔드 등)을 yaml 파일 하나로 관리하고, 컨테이너와 주변 환경을 생성하고 네트워크 볼륨까지 만들 수 있는 것이 Docker Compose입니다.

https://docs.docker.com/compose/

 

Docker Compose

Learn how to use Docker Compose to define and run multi-container applications with this detailed introduction to the tool.

docs.docker.com

 

Docker Compose의 가장 대표적인 장점들은 멀티 컨테이너 관리의 최소화와 환경 이식성이 있습니다.

  • yaml 파일 하나와 명령어 한 줄 (docker-compose up)으로 모든 서비스를 실행
  • 동일한 yaml 파일만 있으면 어디서든 동일한 환경 재현 가능 (로컬과, EC2, CI환경), 운영체제에 따라 설정 충돌 없이 실행 가능

1. Docker Compose 실행을 위한 Command

  • docker compose up -d : yaml 파일에 정의된 서비스 생성 및 시작
  • docker compose ps : 현재 실행 중인 서비스 상태 표시
  • docker compose build : 현재 실행중인 서비스의 이미지만 빌드
  • docker compose logs : 실행 중인 서비스의 로그 표시
  • docker compose down : yaml 파일에 정의된 서비스 종료 및 제거

2. 최종 실행 흐름

  1. Docker Compose 실행 (docker-compose up)
    • 사용자가 실행하는 진입점
  2. Image 확보
    • Compose가 필요한 이미지를 확인
    • 이미지가 로컬에 있으면 그대로 사용 or Dockerfile로 이미지 빌드 or Docker hub에서 pull
  3. 컨테이너 생성 및 실행
    • 이미지를 기반으로 각 서비스를 위한 컨테이너를 생성하고 실행

 

3. Docker-Compose.yml

Flask 애플리케이션을 EC2에서 실행하기 위한 구성이며, 단일 서비스(flask_app)를 중심으로 이미지 빌드부터 볼류, 포트, 환경변수까지 정의한 예시

 

# Compose 파일 포맷 버전 지정
version : '3.8'

 

# 컨테이너 정의
services:
  flask_app:
    build: .
    container_name: flask_app
    ports:
      - "80:5000"
    volumes:
      - /home/ec2-user/db:/app/db
    command: python app.py
    restart: always
    environment:
      - RESET_DB=False
      - PYTHONDONTWRITEBYTECODE=1
      - PYTHONUNBUFFERED=1
      - DB_PATH=/app/db/contents.sqlite
  1. services
    • flask_app이라는 단일 서비스를 정의
    • 서비스 이름은 Compose 내부 DNS 이름으로도 사용되어 컨테이너 간 통신에 활용
  2. build & container_name
    • 현재 디렉터리에 있는 Dockerfile을 기반으로 이미지를 빌드하고, 변경사항이 있을 때마다 이미지가 다시 빌드
    • container name을 고정하기
  3. ports로 호스트와 컨테이너를 연결
    • "호스트 포트 : 컨테이너 포트"
    • 컨테이너 내부에서 컨테이너 포트로 실행되는 Flask 서버를 호스트 포트로 노출시키기
    • 사용자가 브라우저에서 "http://EC2_IP"로 접속하면 Flask 앱에 도달
  4. volums을 통한 데이터 공유 및 영속화
    • EC2의 디렉터리를 컨테이너 경로에 연결
    • Flask앱이 /app/db에 접근하면, 그 내용은 실제 EC2 서버의 DB 디렉터리에 저장되어 컨테이너가 삭제되어도 데이터를 보존
  5. command로 원하는 작업 실행
    • Flask 앱의 진입점인 app.py 실행
  6. restart를 always로 설정해 컨테이너가 종료되거나 예기치 않게 중단되었을 때 자동 재시작
  7. environment로 컨테이너 내부 환경 변수 설정
    • db 초기화 등 실행 조건 제어

 

4. Image & Container & Compose

  • Image : 실행할 앱의 설계도 -> 반죽 틀 (쿠키를 만들기 위한 설계도)
  • Container : Image로부터 만들어진 실행 인스턴스 -> 반죽 틀로 찍어낸 쿠키
  • Compose : 여러 이미지 기반의 컨테이너를 자동으로 만들고 실행하고 연결하는 매니저 -> 여러 개의 쿠키를 한 번에 만들고 굽는 자동화 기계

'Docker & AWS' 카테고리의 다른 글

[Docker 2] Container  (0) 2025.07.02
[Docker 1] Docker의 장점과 Image  (1) 2025.06.29
TAG more
글 보관함
최근에 올라온 글