Spring Boot를 시작하기 전, docker의 mysql 이미지를 이용하여 데이터베이스를 먼저 구축하고자 한다.
docker에 mysql 이미지를 가져와 run을 하는 과정을 먼저 해보자.
docker run --name mysql-test -d -p 3306:3306 mysql:latest
이때, 컨테이너가 실행되지 않고 아래의 log를 볼 수 있었다.
// docker logs mysql-test
2023-07-02 10:37:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
2023-07-02 10:37:34+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-07-02 10:37:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
2023-07-02 10:37:34+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
대충,
MYSQL_ROOT_PASSWORD="password"
MYSQL_ALLOW_EMPTY_PASSWORD="ANY_VALUE"
MYSQL_RANDOM_ROOT_PASSWORD="ANY_VALUE"
이 셋 중 하나를 환경변수로 쓰라는 내용인 것 같다.
명령어를 수정해보자. 로컬에서 학습용으로 사용할 데이터베이스라 빈 비밀번호를 허용하였다.
docker run --name mysql-test -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d -p 3306:3306 mysql:latest
정상적으로 생성된 것을 볼 수 있다.
이제 DBeaver를 이용하여 mysql에 접근해보자.
어라? 난 제대로 한 것 같은데?
왜 오류가 발생하지?
왜지?
기존에 설치한거라고는 MySQL Workbench 뿐인데?
윈도우라면 netstat -ano
명령어를 cmd에 입력하 3306포트가 사용중인지 확인해 보자.
잡았다 요놈
무언가가 사용중인 것 같다.
어라.....
상상치도 못한 정체였다.
윈도우에서 docker를 사용할 때 고질병이니 포트를 바꿔보자.
docker run --name mysql-test -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d -p 3307:3306 mysql:latest
Test Connection을 눌렀을 때 해당 창이 뜬다면 성공이다!
완료를 누르고 데이터베이스를 마음껏 만져보자.
만약, 비밀번호를 이용해서 MySQL을 DBeaver에서 열어보고싶다! 하면
이곳을 참고하자.
docker-compose.yml을 이용해서 컨테이너를 사용해보자.
version: '3'
services:
mysql:
image: mysql:latest
restart: always
container_name: mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- 3307:3306
volumes:
- <data 저장할 절대 경로>:/var/lib/mysql
해당 docker-compose를 작성하고, docker-compose up을 하면 컨테이너를 관리하기 쉬워진다.