Docker compose

정민교·2024년 5월 11일
0

Docker

목록 보기
5/10
post-thumbnail

📒목표

Docker compose가 무엇인지, 왜 사용하고 어떻게 사용하는지 알아보자.

📒Docker Compose

Docker Compose는 여러 컨테이너 앱을 정의하고 공유하는데 도움을 주는 툴입니다.

Docker Compose를 사용하면 yaml파일로 여러 컨테이너 서비스를 정의하고 단일 명령으로 한 번에 시작하거나 종료할 수 있습니다.

Docker Compose의 장점은 애플리케이션 스택을 파일에 정의하여 프로젝트 저장소의 루트에 보관할 수 있는 점입니다.

이는, Github나 GitLab에 Compose 파일을 보관하고, 리포지토리를 클론하고 Compose를 사용하여 앱을 간단하게 시작하는 것이 가능하다는 것을 의미합니다.

📒Docker compose 파일 작성

프로젝트 루트에 compose.yaml 파일을 정의합니다.

✔️app 컨테이너 정의

version: '3.8'
services:
  app:
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - "127.0.0.1:3000:3000"
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

docker 명령어로 컨테이너를 띄웠을 때의 옵션과 전부 동일합니다.

✔️mysql 컨테이너 정의

services:
  app:
    # 앱 서비스 정의
  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

🚨docker run을 사용하여 컨테이너를 실행할 때 Docker가 자동으로 name volume을 생성해줬는데, compose를 사용하여 실행할 때는 상위 수준의 volumes 섹션에 볼륨을 정의한 다음 서비스 설정에서 마운트 포인트를 지정해야 합니다.

✔️compose 파일 완성

services:
  app:
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

✔️실행 및 종료

실행하기

docker compose up -d

docker compose가 볼륨과 네트워크를 생성했습니다. 기본적으로 docker compose는 애플리케이션 스택을 위해 특별히 네트워크를 자동으로 생성합니다.

이전에 docker run 으로 여러 컨테이너를 실행할 때 한 네트워크에 묶기 위해 network를 생성했는데, compose는 자동으로 network를 생성해주기 때문에 compose 파일에서 network를 정의하지 않아도 됩니다.(원하는 이름의 네트워크를 compose 파일에 명시해도 됩니다.)

앱 스택 확인

docker 대시보드를 확인하면 getting-started-app이라는 그룹을 볼 수 있습니다.

이는 Docker Compose의 프로젝트 이름으로 컨테이너를 함께 그룹화하는데 사용됩니다. 기본적으로 프로젝트 이름은, compose.yaml 파일이 위치한 디렉토리의 이름과 같습니다.

종료하기

docker compose down

기본적으로 compose 파일에 지정된 볼륨은 docker compose down을 실행할 때 제거되지 않습니다.

볼륨을 제거하려면 --volmes 플래그를 추가해야 합니다.

📒정리

Docker Compose를 여러 컨테이너를 정의하고 한 번에 실행할 수 있도록 도와주는 도구입니다.

https://docs.docker.com/compose/
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/reference/

profile
백엔드 개발자

0개의 댓글