Docker로 MySQL 환경 구성해서 팀원들에게 제공하기

2025. 8. 5. 10:59·DevOps

들어가며

초기 개발 환경 세팅 시에, 모든 팀원들이 동일한 db 환경을 사용하는 것이 중요하다. 특히, 로컬에서 각자 MySQL을 따로 설치, 설정하면 버전의 차이나 설정의 차이로 인해 오류가 생기기 쉽다. (실제 내 경험이다... 첫 프로젝트에서는 각자 설치했더니 누구는 로컬에서 안돌아가고, 누구는 돌아가고 해서 생기는 이런 사소한 문제들이 있었다.. ㅠㅠ) 그래서 Docker를 사용해 MySQL 환경을 통일시키고 이를 팀원들이 바로 가져다가 쓸 수 있도록 환경을 구성하는 것이 좋다. 

 

Docker Compose로 MySQL 환경 구성 

1. docker-compose.yml 작성 

version: '3.8'

services:
  db: # MySQL
    image: mysql:8.0
    restart: always
    container_name: practice-mysql
    ports:
      - "43306:3306" # 외부 접속 포트
    environment:
      MYSQL_DATABASE: practice
      MYSQL_ROOT_PASSWORD: ${DOCKER_DB_PASS}
      TZ: Asia/Seoul
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - practice-net

volumes:
  mysql_data:

networks:
  practice-net:
  • `ports: "43306:3306"` : 앞쪽 호스트 포트는 43306으로 해서 내 로컬 pc에서 접근할 때 사용하고, 뒤쪽 컨테이너 포트는 MySQL 컨테이너 내부 기본 포트를 작성한다.
  • 이렇게 다르게 설정하는 이유는, 여러 개의 MySQL 컨테이너를 띄우게 되면 각기 다른 포트 번호를 사용해야하고, 로컬 PC에 설치된 MySQL이 이미 존재하여 3306 포트 충돌을 방지하기 위해서 이다 ! 

 

2. .env 파일 작성 

강력한 비번을 권장하지만, 그냥 난 0000으로 설정했다. 

DOCKER_DB_PASS=0000

 

3. root 계정 외부 접속 허용

그 다음에는 기본 root에 대한 외부 접속을 허용시켜야 한다. 

MySQL Docker 이미지 초기 설정 시에 root 계정은 localhost 전용 호스트로 제한된다. (`root'@'localhost'` 사용자만 생성한다.)
그래서 다른 IP(예 : `102.168.x.x` 또는 `%`)에서 접속하면 인증 실패가 발생한다. 
Spring Boot 애플리케이션에서도 역시 Docker MySQL에 접속하려 할 때, 컨테이너 입장에서 외부 IP로 인식하게 된다. 그렇기 때문에 외부 접속 허용이 필요하다. 

 

1. 컨테이너 접속

docker exec -it practice-mysql mysql -u root -p

 

2. 외부 접속 허용 쿼리

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '0000';
FLUSH PRIVILEGES;

 

외부 접속을 허용하는 다른 방식

1) init.sql 파일 방식 

`init.sql` 파일을 만들어서 MySQL 컨테이너가 처음 실행될 때 자동 실행되도록 하는 것이다. 

  • 예시 : init.sql 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '0000';
FLUSH PRIVILEGES;
  • docker-compose.yml 에 연결 : 위에 작성한 docker-compose.yml에 추가해준다. 
volumes:
  - ./init.sql:/docker-entrypoint-initdb.d/init.sql

이렇게 되면, 컨테이너 처음 실행 시에 `/docker-entrypoint-initdb.d/*.sql` 파일이 자동 실행된다. 

 

2) docker-compose.yml에 직접 포함시키기 

아예 그냥 docker-compose.yml에 `MYSQL_ROOT_HOST=%` 환경 변수를 설정하기도 한다. 

environment:
  MYSQL_DATABASE: practice
  MYSQL_ROOT_PASSWORD: ${DOCKER_DB_PASS}
  MYSQL_ROOT_HOST: "%"

 

4. 팀원 제공 

다른 팀원들은 .env파일을 설정하고, 다음 명령만 실행하면 된다. 

docker-compose up -d

 

이렇게 설정하면 Docker로 MySQL을 띄운 뒤, 인텔리제이 등 외부 환경에서도 바로 root 계정으로 접속할 수 있다. 그리고, 다른 팀원들이 `docker-compose up -d` 단 한 줄로 동일한 db 환경을 쉽게 구성할 수 있다 !! 

'DevOps' 카테고리의 다른 글

[Docker] Docker의 모든 것  (0) 2025.09.07
'DevOps' 카테고리의 다른 글
  • [Docker] Docker의 모든 것
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    코드레빗
    몽고디비
    springboot
    TDD
    OS
    스프링부트
    깃
    레디스
    CoolSMS
    github
    지라
    자바
    coderabbit
    promtail
    docker
    jira
    도커
    네트워크
    Spring
    파인튜닝
    AI
    Network
    깃허브
    스프링
    운영체제
    MongoDB
    STT
    redis
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
Docker로 MySQL 환경 구성해서 팀원들에게 제공하기

티스토리툴바