본문 바로가기

Back-End/Docker

Docker Volume을 이용해 MySQL 실행하기

MySQL 실행시키기

1. MySQL 이미지를 바탕으로 컨테이너 실행시키기

$ docker run -e MYSQL_ROOT_PASSWORD=password1234 -p 3306:3306 -d mysql
  • 참고) docker pull 과정은 생략해도 상관없다. 왜냐하면 docker run mysql로 실행시켰을 때 로컬에 이미지가 없으면 DockerHub으로부터 MySQL 이미지를 알아서 다운 받아서 실행시키키 때문이다.
  • -e MYSQL_ROOT_PASSWORD=password1234 : -e 옵션은 컨테이너 환경 변수를 설정하는 옵션이다.
  • DockerHub의 MySQL 공시 문서를 보면 환경 변수로 MYSQL_ROOT_PASSWORD 를 정해주어야만 정상적으로 컨테이너가 실행된다고 적혀져있다.
  • 아래의 명령어로 컨테이너로 들어가서 환경 변수를 직접 준으로 확인해보자.
$ docker exec -it [MySQL 컨테이너 ID] bash

$ echo $MYSQL_ROOT_PASSWORD # MYSQL_ROOT_PASSWORD라는 환경병수 값 출력
$ export # 설정되어 있는 모든 환경변수 출력

2. 컨테이너가 잘 싱행되고 있는지 체크

$ docker ps

3. 컨테이너 실행시킬 때 에러 없이 잘 실행됐는지 로그 체크

$ docker logs [컨테이너 ID 또는 컨테이너명]

Volume을 활용해 MySQL 컨테이너 띄우기

1. MySQL 컨테이너 띄우기

$ cd [호스트 컴퓨터 절대 경로]
$ mkdir docker-mysql # 절대 경로에 폴더 만들기

# docker run -e MYSQL_ROOT_PASSWORD=password1234 -p 3306:3306 -v {호스트의 절대경로}/mysql_data:/var/lib/mysql -d mysql
$ docker run -e MYSQL_ROOT_PASSWORD=password1234 -p 3306:3306 -v /Users/.../docker-mysql/mysql_data:/var/lib/mysql -d mysql
  • pwd 명령어로 볼륨으로 사용하고자 하는 경로를 확인한 뒤 입려해주자
  • 주의) mysql_data 디렉토리를 미리 만들어 놓으면 안된다. 그래야 처음 이미지를 실행시킬 때 mysql 내부에 있는 /var/lib/mysql 파일들을 호스트 컴퓨터로 공유받을 수 있다. mysql_data 디렉토리를 미리 만들어놓을 경우 기존 컨테이너의 /var/lib/mysql 파일들을 전부 삭제한 뒤에 mysql_data로 덮어씌어버린다.

2. MySQL 컨테이너에 접속해서 데이터베이스 만들기

$ docker exec -it [MySQL 컨테이너 ID] bash

$ mysql -u root -p
# 비밀번호 입력

mysql> show databases;
mysql> create database mydb;
mysql> show databases;

3. 컨테이너 종료 후 다시 생성해보기

# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]

# 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=password1234 -p 3306:3306 -v /Users/.../docker-mysql/mysql_data:/var/lib/mysql -d mysql

$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
# 패스워드 입력
mysql> show databases; # 아까 생성한 데이터베이스가 그대로 존재하는 걸 확인할 수 있다.

MySQL 컨테이너 삭제하고 다시 띄어보기

# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]

# 비밀번호 바꿔서 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v /Users/.../docker-mysql/mysql_data:/var/lib/mysql -d mysql

$ docker exec -it [MySql 컨테이너 ID] bash
$ mysql -u root -p # 접속안됨

분명 MYSQL_ROOT_PASSWORD 값을 바꿔서 새로 컨테이너를 띄웠는데 비밀번호는 바뀌지 않은걸까? 
그 이유는 Volume으로 설정해둔 폴더에 이미 비밀번호 정보가 저장되었기 때문이다