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 |