프로젝트 로컬 mysql DB 설정하기 (feat. docker-compose)

Peter·2024년 7월 12일

docker

목록 보기
1/2
post-thumbnail

docker-compose 사용이유

로컬 개발환경을 설정할 때, 실제 DB 를 설치하고 지우는 작업은 부담이 된다.

예를 들어, 같은 mysql 을 사용하더라도 프로젝트에 따라 버젼이 다를 수 있는데 동시에 여러 프로젝트를 관리하다보면 로컬 PC 에 여러 버젼의 mysql DB 를 설치하고 설정하는 작업은 간단하지 않다.

그래서, 나는 간단하게 docker 컨테이너를 로컬에 띄워서 로컬 개발 DB로 사용한다.

물론 docker run 명령어로 간단하게 띄울 수도 있겠지만,
옵션이 많아짐에 따라 명령어가 가독성이 떨어지며 관리도 잘 안되고,
mysql 이외의 인프라(redis, kafka 등)가 추가됨에 따라 docker-compose 하나로 관리하는 것이 관리 코스트가 적게 들기에 docker-compose 를 주로 사용한다.

적용하기

1. 프로젝트 설정

프로젝트 root 하위에 아래와 같이 폴더를 구성했다.
docker-compose.yml 파일에서 volume 설정을 한 경우, volume 폴더 하위로 매핑시켰다.

2. docker-compose 파일

위 docker-compose.yml 의 상세 내용은 아래와 같다.

services:
  mysql:
    image: 'mysql:8.0.34'
    environment:
      - 'MYSQL_DATABASE=db_myproject'
      - 'MYSQL_PASSWORD=test'
      - 'MYSQL_ROOT_PASSWORD=rootsecret'
      - 'MYSQL_USER=test'
      - 'TZ=Asia/Seoul'
    container_name: my-project-mysql
    ports:
      - '3307:3306'
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    volumes:
      - ../volume/mysql:/var/lib/mysql
    # Secure MySQL installation options
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
      timeout: 10s
      retries: 5
  • 간단하게 DB 접속 정보를 설정
  • volume 설정 (docker container 가 종료되더라도 데이터를 영구적으로 저장)
  • restart 설정 (PC 재부팅시 자동으로 다시 컨테이너 띄워줌)
  • port 설정 (본 예시 설정에서는 로컬 환경에서 3307 로 접속할 수 있다.)
  • healthcheck 를 설정하면 해당 container 의 상태를 모니터링할 수 있으며, docker-compose 로 여러 컨테이너를 띄울 때 컨테이너 생성 순서를 컨트롤 할 수 있다. (depends_on 옵션으로 설정)
    아래와 같이 healthcheck 가 설정된 컨테이너는 말그대로.. health check 가 가능하다.

3. docker-compose 실행 또는 정지

docker-compose.yml 파일이 있는 디렉터리로 이동하고 아래 명령어를 실행하면 된다.

## 실행
$> docker-compose up -d

## 정지
$> docker-compose down

3-1. *.sh 파일로 작성해두고 간단하게 관리하기

docker-compose.yml 파일이 있는 폴더로 이동해서 docker-compose 명령어를 실행하는 것이 귀찮아질 때도 있다.
프로젝트 root 에 sh 파일을 만들어두면 이런 귀찮음을 해결할 수 있다.

#!/bin/bash

# 스크립트 파일이 위치한 디렉토리
SCRIPT_DIR="$(dirname "$0")"

# docker-compose.yml 파일이 있는 상대 경로
COMPOSE_DIR="$SCRIPT_DIR/local-infra/database"

# 해당 디렉토리로 이동
cd "$COMPOSE_DIR" || {
  echo "디렉토리로 이동할 수 없습니다: $COMPOSE_DIR"
  exit 1
}

# docker-compose up -d 명령어 실행
docker-compose up -d

# 명령어 실행 결과 확인
if [ $? -eq 0 ]; then
  echo "docker-compose가 성공적으로 실행되었습니다."
else
  echo "docker-compose 실행 중 오류가 발생했습니다."
  exit 1
fi

위와 같이 run_docker_compose.sh 파일을 작성한 뒤 terminal 에서 아래와 같이 실행해주면 좀 더 편리하게 로컬 인프라를 on/off 해줄 수 있다. (위 .sh 파일과 비슷하게 docker-compose down 명령어를 실행하는 파일을 만들어서 같이 사용하자)

## 먼저 sh 파일의 실행 권한을 준다.
$> chmod +x run_docker_compose.sh

## sh 파일을 실행한다.
$> ./run_docker_compose.sh

결론

docker-compose 파일 및 shell command 를 활용하여 프로젝트 로컬 개발 환경에 필요한 local-infra 를 편리하게 관리하자.

Reference

0개의 댓글