
들어가며
초기 개발 환경 세팅 시에, 모든 팀원들이 동일한 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 |
|---|