본문 바로가기
DOCKER

[비전공자의 Docker ] Volume을 이용한 MySQL 실행시켜보기

by 미눅스[멘토] 2024. 12. 11.
728x90

 

 

 

 

 

https://deahan.tistory.com/448

위 링크처럼 설치하게 되면 이전에는 그냥 mysql을 생성해서 실행중인 컨테이너를 삭제하면 안에 데이터가 모두 날라가게 되는데

이것을 방지하기위해 저장공간을 호스트와 공유하여 컨테이너가 삭제 되어도 안전하게 복원 시킬 수 있는

-v 볼륨 옵션을 이용하여 컨테이너를 삭제시켜도 데이터가 온전히 남아 있을 수 있게 mysql을 설치 구축 설계를 많이한다.

 

도커 볼륨이 뭔지도 모르고 이해가 안된다면 아래 링크로 간략하게 그림으로 보고오자

https://deahan.tistory.com/447

 

[비전공자의 Docker ] Docker Volume(도커 볼륨)

Docker를 활용하면 특정 프로그램을 컨테이너로 띄울 수 있다. 이 프로그램에 기능이 추가되면 새로운 이미지를 만들어서 컨테이너를 실행시켜야 한다. 이 때, Docker는 기존 컨테이너에서 변경된

deahan.tistory.com

 

이제.. 바로 해보자...

 

 

-v (볼륨 옵션)를 이용한 mysql 컨테이터 실행

 docker run -e MYSQL_ROOT_PASSWORD=myPassword -d -p 3306:3306 -v [나의경로]:[연결시킬 mysql 디렉토리 경로] mysql

예시) docker run -e MYSQL_ROOT_PASSWORD=myPassword -d -p 3306:3306 -v D:\MinwooTool\docker-mysql:/var/lib/mysql mysql

 

 

docker ps 명령어로 실행중인 mysql 컨테이너 확인

PS D:\MinwooTool\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                               NAMES
2229407a95be   mysql     "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   determined_davinci

 

 

실행중인 컨테이너 안으로 접속 - #docker exec -it [컨테이너ID 3자리 이상] bash

PS D:\MinwooTool\docker-mysql> docker exec -it 2229 bash
bash-5.1#

 

 

mysql 접속 - mysql -u root -p

Enter Password : 여기에 비밀번호 입력 후 엔터

bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.1.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

databases 확인

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

 

여기서 mydb라는 데이터베이스가 없음 그래서 mydb데이터 베이스 생성할거임

 

mydb 데이터 베이스 생성

mysql> create database mydb;
Query OK, 1 row affected (0.01 sec)

 

다시 데이터 베이스들 확인

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 

 

mydb데이터 베이스가 생성된 것을 볼수 있음

여기서 exit 로 모두 빠져나와 mysql 컨테이너를 삭제

PS D:\MinwooTool\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                               NAMES
2229407a95be   mysql     "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   objective_ellis
PS D:\MinwooTool\docker-mysql> docker rm -f 222
222
PS D:\MinwooTool\docker-mysql>

 

 

그리고 다시 처음했던 그대로 생성해서 들어가보면

PS D:\MinwooTool\docker-mysql> docker run -e MYSQL_ROOT_PASSWORD=myPassword -d -p 3306:3306 -v D:\MinwooTool\docker-mysql:/var/lib/mysql mysql
f690dc0a832bbf330b638bbdef1d858e5a9acf6b5462cfc7bde0c5eedc3aa055

PS D:\MinwooTool\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                               NAMES
f690dc0a832b   mysql     "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   condescending_montalcini

PS D:\MinwooTool\docker-mysql> docker exec -it f69 bash
bash-5.1# mysql -u root -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 9.1.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>

mydb 데이터베이스가 그대로 있는것을 볼 수 있다

이것은 -v(볼륨) 옵션을 이용해 서로의 저장공간을 공유해 컨테이너를 삭제시켜도 호스트 저장공간에 저장데이터가 그대로 남아 있어 그렇다.

 

 

마지막으로... 꼭 반드시 알아야 하는 주의사항!!

이것을 모른다면 3시간 날라감...... 

주의 사항이 하나 있다 이렇게 호스트에 공유해서 컨테이너를 만들어 놓은 상태에서

컨테이너를 삭제하고 새로 실행시킬때 비밀번호를 새로 환경변수에 새롭게 등록하게 되는데

이전과 다른 새로운 비밀번호로 환경변수에 등록하고

새로운 비밀번호로 mysql에 접속하려고 시도하면 아래와 같은 오류를 마주하게 될 것이다.

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

그 이유는 최초 -v(볼륨) 옵션을 이용하여 컨테이너를 띄울때 호스트의 저장공간에 환경변수도 모두 같이 저장되어 있어서 다시 컨테이너를 새로 만든다 하여도 호스트에 저장되어 있는 환경변수가 불러와져

호스트 환경변수에 등록이 되어있는 이전 비밀번호로 입력해야 들어가진다.

 

그래서 기존꺼 말고 새롭게 모든것을 다시 등록하고 싶다면 

공유되고 있는 호스트 디렉토리 안에 모든 데이터가 없어야 새롭게 등록이 된다.