IT/DevOps

[Docker] multi-container application: Docker compose

kykyky 2024. 2. 7. 19:31

이전 글 👇
 
2024.02.07 - [IT/DevOps] - [Docker] Database 유지하기: 2. Bind mount

[Docker] Database 유지하기: 2. Bind mount

이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공

intoky.tistory.com

 
 


 

Docker Compose


 
 
대부분의 Application들은 Database를 필요로 하고, 
Application과 Database는 별도의 Container에서 실행되는 것이 좋습니다.

 

출처: https://docs.docker.com/get-started/07_multi_container/

 
 
이렇듯, multi-container로 된 Application을 정의하고 공유하는 데에 Docker compose는 아주 편리한 도구입니다. 
Docker compose를 위해, App을 정의하는 yaml 파일이 필요합니다.

 
 
 
1. compose.yaml 생성
 
 
getting-started-app 디렉토리 위치에서 compose.yaml 파일을 생성하고 아래와 같이 입력하여,
Application을 위한 Container와 MySQL을 위한 Container, 그리고 필요한 Volume을 각각 정의합니다.

services:
  app: # Define the app service
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app # /app을, command가 실행될 "현재 작업 디렉토리"로 설정
    volumes: # mount "현재 디렉토리 (= command가 실행되는 location) (host 쪽)" to "/app (container 내부)" -----> host의 application 소스코드를 container에 제공
      - ./:/app
    environment:
      MYSQL_HOST: mysql # hostname for the running MySQL server
      MYSQL_USER: root # username to use for the connection
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql: # Define the MySQL service
    image: mysql:8.0
    volumes: # mount "todo-mysql-data" to "/var/lib/mysql"
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data: # volume의 이름

 
 
 
2. Container를 생성하고 시작하기
 
getting-started-app 디렉토리 위치에서 아래 명령어를 입력합니다.

docker compose up -d

 
Volume과 Network는 자동으로 생성됩니다.
 
 
 
3. Application 실행해보기
 
localhost:3000으로 접속하면 웹 App을 확인할 수 있습니다.
 
 
 
4. Container와 Network를 멈추고 삭제하기
 
getting-started-app 디렉토리 위치에서 아래 명령어를 입력합니다.

docker compose down

 
위 명령어를 실행해도 Volume은 사라지지 않으며,
삭제를 원할 시 --volumes 옵션을 추가해야 합니다. 
 
 


 
감사합니다~