imhamburger 님의 블로그

도커(Docker) - Docker compose 사용하기 본문

도커(Docker)

도커(Docker) - Docker compose 사용하기

imhamburger 2024. 10. 28. 10:28

도커 컴포즈는 단일서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너를 묶음으로 관리할 수 있다.

 

여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면, 각각 한개씩 생성해야 하는 번거로움이 있다.

컨테이너의 수가 많아지고 정의해야할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 좋다.

 

도커 컴포즈를 사용하는 방법은 도커 공식문서에 나와있다. (공식문서)

 

이제 도커 yml 파일을 이용해 만들어놓은 API 와 MariaDB를 함께 실행시켜보자.

MariaDB는 도커허브에 있는 것을 사용하였다. (MariaDB 도커허브)

 

docker-compose.yml

services:

#데이터베이스
  database:
    image: <이미지 이름>
    container_name: <컨테이너 이름>
    environment:
      MARIADB_ROOT_PASSWORD: example
      MARIADB_USER: <DB 유저 이름>
      MARIADB_PASSWORD: <DB 비밀번호>
      MARIADB_DATABASE: <데이터베이스 이름>
    volumes:
      - <로컬 작업파일>:<작업파일 도커 경로지정>
    ports:
      - <포트번호>:3306

#앱
  app:
    container_name: <컨테이너 이름>
    build: .
    ports:
      - <포트번호>:8080
    restart: always
    depends_on:
      - database #database가 먼저 뜨고 app이 실행 의존성설정
    links:
      - database
    platform: linux/amd64

 

 

예시

services:

  database:
    image: mariadb
    container_name: todo-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: example
      MARIADB_USER: <유저이름 입력>
      MARIADB_PASSWORD: <비밀번호 입력>
      MARIADB_DATABASE: <데이터베이스 입력>
    volumes:
      - ./src/main/resources/db_config/initdb.d:/docker-entrypoint-initdb.d
    ports:
      - 6033:3306

  app:
    container_name: todo-app
    build: .
    ports:
      - 8888:8080
    restart: always
    depends_on:
      - database #database가 먼저 뜨고 app이 실행 의존성설정
    links:
      - database
    platform: linux/amd64

 

yml 파일에 적는 건 도커를 run 할 때 쓰는 옵션들과 동일하다. 이미지 이름, 컨테이너 이름, environment 등등.

옵션에 관한 설명은 이전에 했던 프로젝트 글을 참고하면 좋다.

 

결과

 

 

도커컴포즈 빌드

docker compose up -d --force-recreate --build

 

--force-recreate: 이 옵션은 기존 컨테이너가 존재할 경우에도 해당 컨테이너를 강제로 다시 생성하는 역할을 한다. 컨테이너에 변화가 없다고 하더라도 무조건 새롭게 컨테이너를 생성하여 실행한다. 만약, 컨테이너 내부에서 변경된 설정이나 파일 시스템에 의한 문제를 해결하거나, 깨끗한 상태에서 컨테이너를 재시작하고 싶을 때 사용된다.

 

--build: 이 옵션은 도커 이미지를 빌드할 때, 캐시를 사용하지 않고 항상 새로 빌드하도록 강제한다. 보통 Dockerfile이 변경되었거나 이미지 내 소스 코드가 변경된 경우 새로 빌드를 하고 싶은 경우에 사용된다. 이 옵션을 사용하면 이미지 빌드 과정에서 기존 빌드 캐시를 사용하지 않고 처음부터 새로 빌드.

 

 

Docker compose 환경 종료

docker compose down