[Docker] Docker Compose란?

DeMar_Beom·2023년 5월 17일

Docker Compose란?

설명

  • Docker Compose는 여러 개의 도커 컨테이너를 정의하고 구성하여 멀티 컨테이너 애플리케이션을 쉽게 관리할 수 있는 도구

예시 상황

  • 웹 애플리케이션과 데이터베이스를 포함한 멀티 컨테이너 애플리케잉션을 구성하려고 함
  • 웹 애플리케이션은 Flask로 작성되었고, 데이터베이스는 PostgreSQL를 사용

프로젝트 구조

myapp/
  ├── app/
  │    └── app.py
  ├── db/
  │    └── init.sql
  ├── Dockerfile
  ├── docker-compose.yml
  └── requirements.txt

Dockerfile

# 베이스 이미지 설정
FROM python:3.8-alpine

# 작업 디렉토리 설정
WORKDIR /app

# 필요한 파일 복사
COPY requirements.txt .

# 의존성 설치
RUN pip install -r requirements.txt

# 소스 코드 복사
COPY app/ .

# 앱 실행
CMD [ "python", "app.py" ]

docker-compose.yml

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5000:5000
    volumes:
      - ./app:/app
    depends_on:
      - db
  db:
    image: postgres:12
    environment:
      - POSTGRES_USER=myuser
      - POSTGRES_PASSWORD=mypassword
    volumes:
      - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
  • version : '3'은 docker compose파일의 버전을 지정
  • services : 섹션에는 각 서비스의 정의를 작성
  • web : Dockerfile을 사용하여 이미지를 빌드하고, 호스트의 5000포트와 컨테이너의 5000포트를 연결
  • volumes : 호스트의 './'디렉토리와 컨테이너의 './app'디렉토리를 연결함. 'depends_on'을 사용하여 'db'서비스가 먼저 실행되도록 설정
  • db : PostSQL12 이미지 사용, environment를 사용하여 PostgreSQL사용자 이름과 비밀번호 설정
  • db - volumes : 호스트의 './db/init.sql' 파일을 컨테이너의 '/docker-entrypoint-initdb.d/init.sql' 경로로 연결하여 초기 SQL스크립트를 실행

애플리케이션 실행

docker-compose up
  • Docker Compose는 'docker-compose.yml'파일을 읽어 애플리키에션의 서비스를 빌드하고 실행
  • 웹 애플리케이션은 호스트의 5000포트를 통해 접근 가능

Docker Compose 명령어 및 관련 설정

Docker Compose 명령어

  • docker-compose up : docker compose파일을 읽어 서비스를 빌드하고 실행
  • docker-compose up -d : 백그라운드에서 서비스를 실행
  • docker-compose down : 실행중인 서비스를 중지하고 컨테이너 제거
  • docker-compose ps : 실행중인 서비스의 상태 확인

환경 변수 설정

  • 데이터베이스 비밀번호나 애플리케이션의 구성 설정 등 환경 변수로 지정하여 동적으로 변경 가능
  • 환경변수는 'environment'키를 사용하여 각 서비스에 설정 가능

네트워크 설정

  • docker compose를 사용하면 서비스 간에 내부 네트워크를 생성하여 컨테이너 간 통신을 쉽게 설정 가능
  • 서비스 간 통신에는 서비스명을 조합하여 고유한 네트워크를 생성

0개의 댓글