Docker에서 Mysql 컨테이너를 실행하고 데이터를 지속적으로 유지하는 볼륨을 사용하여, mysql 서버에 데이터를 저장하고 컨테이너를 삭제해도 데이터가 유지되는지 확인을 해볼 것이다.
1. MySQL 컨테이너 생성 및 볼륨 마운트
docker run -itd --name=mydb -e MYSQL_ROOT_PASSWORD=pass123# -e MYSQL_DATABASE=busanit -v ${PWD}/mydb-data:/var/lib/mysql mysql:5.7-debian 5dfaa2c63bc2d0ac754de146f9bda6477c663a02058ef18ca26ddd45e01bbcb7
docker run 명령어를 사용하여 mydb라는 컨테이너를 실행 했다. mysql의 루트 계정의 비밀번호는 pass123#으로 설정해줬다. 또한 busanit라는 데이터베이스를 자동으로 생성하였다.
2. MySQL 데이터베이스 연결 및 테이블 생성
ubuntu@docker:~$ docker exec -it mydb bash
root@e6d1706c9d1f:/# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| busanit |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
mysql> use busanit;
mysql> create table dockerclass (classid int, classname varchar(50));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into dockerclass values (10, 'docker container');_
mysql> select * from dockerclass;
+---------+------------------+
| classid | classname |
+---------+------------------+
| 10 | docker container |
+---------+------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
docker exec 명령어를 사용하여 mydb 컨테이너에 접속한다. 그 후 mysql 루트 사용자로 로그인하고, busanit 데이터 베이스를 선택한다. 그리고 나서 dockerclass 라는 테이블을 생성하고 데이터를 추가한다.
3. 볼륨 확인
ubuntu@docker:~$ docker stop mydb
mydb
ubuntu@docker:~$ docker rm mydb
mydb
Mysql 데이터를 /var/lib/mysql/busanit 디렉터리에 생성하여 실제 파일이 호스트에 마운트된 mydb-data 디렉터리에 저장되어 있는지 확인을 했다. 이후에 mydb 컨테이너를 중지하고 삭제한 후에도 데이터가 호스트에 유지되는지 확인한다.
4. 새 컨테이너에서 데이터 복구 확인
docker run -itd --name=mydb -e MYSQL_ROOT_PASSWORD=pass123# -e MYSQL_DATABASE=busanit -v ${PWD}/mydb-data:/var/lib/mysql mysql:5.7-debian 5dfaa2c63bc2d0ac754de146f9bda6477c663a02058ef18ca26ddd45e01bbcb7
같은 설정으로 새로운 mydb 컨테이너를 실행하고 mydb-data 볼륨을 다시 마운트 한다. 이후 mysql 클라이언트를 통해 busanit 데이터 베이스에 접속하여 데이터가 여전히 존재하는지 확인해봤다.
이전에 생성한 dockerclass 테이블과 그 안에 저장된 데이터가 유지된 것을 확인했다.
이 실습을 통해 Docker 볼륨을 활용하여 컨테이너 데이터가 유지도록 하는 방법을 익힐 수 있었다.
'OS > Docker' 카테고리의 다른 글
[Docker] Python Flask 웹 서비스 배포 (1) | 2024.11.04 |
---|---|
[Docker(go, shell-scr)] Multi-stage Build 이미지 경량화 (0) | 2024.11.04 |
[Docker] scratch 이미지 경량화 (3) | 2024.10.28 |
[Docker] 이미지 경량화 (1) | 2024.10.28 |
[Docker] Dokerfile 빌드 (개발 & 배포 과정) (0) | 2024.10.28 |