티스토리 뷰

728x90

도커 이미지는 readonly속성을 가지고, 컨테이너에 추가되는 별도의 데이터들은 rw 레이어에 저장이된다.

데이터베이스를 운영하는 경우 고객의 데이터들이 rw(read/write)레이어에 쌓이게 되는데, 컨테이너를 삭제하게 되면 이 데이터들이 다 사라지게 된다.

만약에 실수로 컨테이너를 삭제하게 된다면.....그 결과가 너무 무섭다..

 

그래서 컨테이너가 만들어주는 데이터를 영구적 보존이 필요한 경우, docker host에 별도의 저장소를 만들어서 관리를 하게 된다.

mysql 데이터베이스의 경우 rw 레이어의 /var/lib/mysql에 쌓이게 되는데 여기에 있는 데이터를 별도의 저장소에도 저장해주면 실수로 컨테이너를 삭제해도, 데이터는 남아있을 수 있다.

 

VOLUME 옵션

-v [host path]:[container mount path]
-v [host path]:[container mount path]:[read write mode]
-v [container mount path]

* host path를 적지 않는 경우에는 임의의 디렉토리를 생성하여 저장

 

✨mac M1인 경우 --platform linux/amd64 명시 해 줄 것

docker run -d --name db -v /Users/chenchen/Desktop/dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --platform linux/amd64  mysql:latest

또한 다른 환경의 경우 dbdata라는 폴더가 없으면 자동으로 생성해주지만 m1인 경우...디렉토리를 만들고 Docker -> Preferences... -> Resources -> File Sharing에서 공유할 디렉토리를 지정해주어야한다.

그렇지 않으면 아래와 같은 에러를 볼 수 있다..m1칩..그만.....왜 혼자만..다른 길을 가는건가요...

Error response from daemon: Mounts denied:
The path /dbdata is not shared from the host and is not known to Docker.

 

아무튼, 컨테이너를 실행시켰으면 mysql 터미널에 접속해서 데이터베이스를 생성하고, 실제로 지정한 폴더에 데이터들이 쌓여있는지 확인해보자

$ docker exec -it db /bin/bash
$ mysql -u root -p

#create [데이터베이스명];
#show databases;

dockerTest라는 데이터베이스를 만들었다. 앞서 지정한 폴더에 가서 실제로 dockerTest라는 데이터베이스가 생성되었는지 한번 보자!

이제 컨테이너를 실수로 삭제해도, 데이터는 영구적으로 보존할 수 있다😮‍💨

 

inpect를 통해서 mounts의 정보를 알 수 있다.

$ docker inspect --format '{{.Mounts}}' db

 

볼륨 관리

- 사용중인 볼륨을 확인하고, 불필요한 볼륨을 삭제 할 수 있다.

$ docker volume ls
$ docker rm [volume name]

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함