https://deahan.tistory.com/448
위 링크처럼 설치하게 되면 이전에는 그냥 mysql을 생성해서 실행중인 컨테이너를 삭제하면 안에 데이터가 모두 날라가게 되는데
이것을 방지하기위해 저장공간을 호스트와 공유하여 컨테이너가 삭제 되어도 안전하게 복원 시킬 수 있는
-v 볼륨 옵션을 이용하여 컨테이너를 삭제시켜도 데이터가 온전히 남아 있을 수 있게 mysql을 설치 구축 설계를 많이한다.
도커 볼륨이 뭔지도 모르고 이해가 안된다면 아래 링크로 간략하게 그림으로 보고오자
https://deahan.tistory.com/447
이제.. 바로 해보자...
-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(볼륨) 옵션을 이용하여 컨테이너를 띄울때 호스트의 저장공간에 환경변수도 모두 같이 저장되어 있어서 다시 컨테이너를 새로 만든다 하여도 호스트에 저장되어 있는 환경변수가 불러와져
호스트 환경변수에 등록이 되어있는 이전 비밀번호로 입력해야 들어가진다.
그래서 기존꺼 말고 새롭게 모든것을 다시 등록하고 싶다면
공유되고 있는 호스트 디렉토리 안에 모든 데이터가 없어야 새롭게 등록이 된다.
'DOCKER' 카테고리의 다른 글
[비전공자의 Docker ] Docker Compose (도커컴포즈) (0) | 2024.12.12 |
---|---|
[비전공자의 Docker ] Dockerfile (0) | 2024.12.12 |
[비전공자의 Docker ] Docker로 MySQL 실행시켜보기 및 오류 (1) | 2024.12.11 |
[비전공자의 Docker ] Docker Volume(도커 볼륨) (0) | 2024.12.10 |
[비전공자의 Docker ] 자주쓰는 명령어 (1) | 2024.12.05 |