Dokcer

docker compose - springboot와 여러 컨테이너 함께 띄우기

땍땍 2024. 8. 16. 17:51

docker compose란 무엇인가?

기존 docker는 한 번에 하나의 컨테이너 밖에 띄우지 못 하기 때문에 DB와 Springboot를 띄우기 위해서는 각 컨테이너를 따로 실행해주는 작업을 해줘야 했다.

이러한 반복된 작업을 하지 않도록 여러 개의 컨테이너를 하나로 묶어 하나의 명령어 혹은 한 번의 클릭만으로 실행할 수 있도록 도와주는 것이 docker compose이다.

이러한 docker compose를 사용하기 위해서는 docker 와 별개로 따로 설치를 해주어야 한다.

맥북은 아래와 같이 설치하면 되겠다.

brew install docker-compose

ubuntu에서는 아래와 같이 설치

아래는 2024.8월 기준으로 최신 버전인 2.29.1 을 다운 받는 방법이며, 최신 버전은 아래 링크를 통해 확인 하면 되겠다.

https://github.com/docker/compose/releases

$ sudo curl -SL "<https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose --version

이후 docker-compose.yml 파일을 생성해주어야 하는데, 위치는 dockerfile과 동일한 위치. 프로젝트 파일의 최상단에 생성해주면 된다.

파일명은 변경해도 되지만, 그럴 경우 이후에 과정에서 추가적으로 파일 이름을 명시해주어야 하는 작업을 해주어야 하기에 가능하다면 그대로 작성하자

 

 

docker-compose를 작성하기 전 선택해야하는 사항이 있는데,

Dokcerfile 혹은 이미지를 미리 생성해두고 이를 사용하여 실행하는 방법과

Dockerfile이 존재하지 않더라도 가지고 있는 이미지를 실행하는 방법이 있다.

Mysql과 Mongo와 같은 이미지는 아래와 같이 작성하게 되면 따로 이미지를 생성하지 않아도 외부에서 다운로드해 실행할 수 있다.

Springboot는 기존에 작성해둔 Dockerfile을 활용해 실행하도록 하였다.

services:
  mysql:
    container_name: mysql
    image: mysql:8.4
    environment:
      - MYSQL_DATABASE=test
      - MYSQL_ROOT_PASSWORD=test

    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  mongo:
    container_name: mongo
    image: mongo:7.0.12
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_DATABASE: test
    volumes:
      - mongo_data:/data/db
  redis:
    container_name: redis
    image: redis:alpine
    hostname: redis
    ports:
      - 6379:6379
    volumes:
      - redis_data:/data

  springboot-app:
    container_name: springboot
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - mysql
      - mongo
      - redis

volumes:
  mysql_data:
  mongo_data:
  redis_data:

image명은 구분을 위해 작성해둔 것이기에 작성하지 않아도 괜찮다.

volumes은 설정하게 되었을 경우 데이터가 저장이 되어 도커를 재실행해도 이전에 저장된 값을 그대로 불러올 수 있다.

'Dokcer' 카테고리의 다른 글

docker hub 사용법  (0) 2024.08.18
도커(Docker) - Dockerfile, build, run  (0) 2024.07.27