티스토리 뷰
이번에 프로젝트를 시작하면서 docker로 database 환경 구축했습니다.
database는 mysql을 사용하고 로컬 개발용 db과 테스트용 db로 나눴습니다.
두 개의 database를 구성하기 위해서 port와 env file 경로를 다르게 명시해주었습니다.
아래는 docker compose 파일과 env 파일 예시입니다.
홈 디렉토리({home directory})는 비워두었습니다.
# docker-compose.yml
version: '3.8'
services:
dev-db:
image: 'mysql:8.0'
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
env_file:
- .env.development
environment:
MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
volumes:
- '/{home directory}/dev/mysql:/var/lib/mysql'
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-p${DB_ROOT_PASSWORD}" ]
retries: 3
timeout: 5s
test-db:
image: 'mysql:8.0'
ports:
- '3307:3306'
command: --default-authentication-plugin=mysql_native_password
env_file:
- .env.test
environment:
MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
volumes:
- '/{home directory}/test/mysql:/var/lib/mysql'
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-p${DB_ROOT_PASSWORD}" ]
retries: 3
timeout: 5s
# .env.development
DB_DATABASE=databasename
DB_USERNAME=username
DB_PASSWORD=userpassword
DB_ROOT_PASSWORD=rootpassword
docker document에서 env_file 경로를 명시하는 방법을 확인하고 적용했지만, docker-compose up 명령어로 다중 컨테이너 앱을 시작했을 때, 이상하게도 MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD 변수 값이 없다고 에러가 발생했습니다.
env_file 경로, 파일 명, env파일 내 환경 변수 key 값이 docker compose 파일에서 사용하는 변수 이름과 일치하는지 확인했지만 다른 부분은 없었습니다. 검색도 해봤지만 원인이 무엇인지 찾지 못했습니다.
그러던 중 정상적인 해결 방법은 아니지만 일단 기록으로 남겨보겠습니다.
docker compose 파일에서 env_file을 명시할 수 있지만 cli에서도 명시할 수 있습니다.
그 점을 이용해서 docker compose 파일 내 test-db 컨테이너 설정을 주석처리하고 docker-compose --env-file ./.env.development up -d 를 해보니 정상적으로 데이터베이스가 작동합니다. docker-compose down 후 test db쪽도 똑같이 해주면 됩니다. 따로따로 실행했을 때 잘 작동하는 걸 확인한 후 주석을 다 풀고 docker-compose up -d 명령어로 시작을 해보면 두 데이터베이스 모두 정상 작동합니다.
'docker' 카테고리의 다른 글
docker compose로 spring과 mysql 서비스 구축 (0) | 2023.07.06 |
---|