프로그래머스 백엔드 데브코스 과제를 진행하면서 멘토님께서 docker-compose를 사용해볼 것을 권유해주셨다. 원래 Docker을 사용해 MySQL을 띄웠는데, Docker-compose를 사용하면 DB뿐만 아니라 다른 설정들도 yml만 작성하면 한 번에 설정할 수 있어 편리하다는 것을 깨달아 이후 과제에도 계속 적용하고 있다.
설정
windows와 MacOS는 Docker Desktop이 설치되어 있다면 Docker Compose도 자동으로 설치되어 있다. OS 별로 설치 방법은 공식 문서에서 확인 가능
$ docker-compose -v //버전 확인
docker-compose.yaml로 도커 컴포즈 프로젝트 실행
기존에는 docker run을 이용해 단일 컨테이너를 실행했다
docker run --name springBasic -e MYSQL_PORT_HOST=% -e MYSQL_ROOT_PASSWORD=root1234! -e MYSQL_DATABASE=voucher_mgmt -d -p 3306:3306 mysqldocker run --name springBasic -e MYSQL_PORT_HOST=% -e MYSQL_ROOT_PASSWORD=root1234! -e MYSQL_DATABASE=voucher_mgmt -d -p 3306:3306 mysql
너무길고, 헷갈린다.
위 명령어를 docker-compose.yml로 대체했다.
#version: '3' # 컴포즈 파일 버전. 2024.06 기준 명시하면 오류남. 이제 명시할 필요 없어짐
services: # 컨테이너 정의(컨테이너의 집합체를 보주로 서비스라고 함)
mysql:
image: mysql:latest # 이미지 이름을 명시해서 지정 (Dockerfile이 없어도 실행 가능)
container_name: springBasic
environment: # 환경 변수 설정
MYSQL_ROOT_PASSWORD: root1234!
MYSQL_DATABASE: voucher_mgmt
MYSQL_CHARSET: utf8mb4
MYSQL_COLLATION: utf8mb4_unicode_ci
ports:
- "3307:3306" # 호스트의 3307 포트를 컨테이너의 3306 포트로 매핑
volumes:
- ./data/:/var/lib/mysql
- ./schema.sql:/docker-entrypoint-initdb.d/schema.sql #schema.sql 실행을 위한 설정. docker-compose.yml과 schema.sql이 같은 루트 경로에 있어야 한다.(경로 수정 가능)
./schema.sql:/docker-entrypoint-initdb.d/schema.sql
: docker 컨테이너를 올릴 때 schema.sql 파일의 ddl을 실행하고 싶을 때만 추가하면 된다. 이때, application.yml에서 ddl-auto를 none으로 설정해줘야 한다.2. Docker Container 실행
```java
$ docker-compose up
```
- 아래와 같이 정상적으로 실행되고, 컨테이너가 생성된다
- 위 명령어를 사용하면 백그라운드에서 실행하지 않고 터미널 세션을 차지하게 되 컨테이너의 로그가 터미널에 표시된다.
docker-compse.yml
또는 docker-compse.yaml
의 이름을 사용. 만약 다른 이름으로 파일을 관리하고 사용한다면 다음과 같이 입력$ docker-compose -f docker-compose-custom.yml up
$ docker-compose up -d
$ docker-compose down
출처