docs.docker.com/get-started/05_persisting_data/
❓링크는 데이터를 고정한다고 되어있다
1. container의 파일시스템을 알아보자
container마다 파일을 CRUD할 수 있는 "scratch space"를 갖게 됨(백업 불가능한 임시 사용자 공간)
연습) ubuntu 컨테이너를 실행시켜보자
ubuntu 컨테이너에서 실행할 명령어는 bash -c 다음의 "" 안에 있는 것임
1) 1~10000 중 하나를 뽑아서 /data.txt 파일에 저장한다
2) tail -f /dev/null : /dev/null의 마지막 내용을 확인하는 건데 container가 계속 떠 있게 유지하려고 한거라는 구만
$ sudo docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
83ee3a23efb7: Pull complete
db98fc6f11f0: Pull complete
f611acd52c6c: Pull complete
Digest: sha256:703218c0465075f4425e58fac086e09e1de5c340b12976ab9eb8ad26615c3715
Status: Downloaded newer image for ubuntu:latest
0d1189f6c2ab009d3ccf80c2055ef3c5117b4ae92382b418d0922dd035aa3d15
container 내의 /data.txt 를 확인해보면 뭔가 있음!
$ sudo docker exec 0d1189f6c2ab cat /data.txt
6490
근데 새로 ubuntu container를 실행하면 없다
run -it ubuntu ls / : ubuntu container를 새로 만들어 실행하는데 pseudo-TTY에 docker를 할당해서 container의 stdin과 연결함
-> 로컬에서 container에 명령할 수 있는 bash shell을 만들어줌
-> 새 ubuntu container에는 data.txt 파일을 만들라고 안했으니까 파일이 없음
-> tail -f /dev/null 명령이 없어서 ls /을 실행하고 바로 container가 종료됨
$ sudo docker run -it ubuntu ls /
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
$ sudo docker exec 0d1189f6c2ab ls /
data.txt
run -it ubuntu 해서 shell로 들어간 뒤에 종료되면 어떻게 되는지 궁금해서 여러번 해봄
ls는 Up 상태인 container만 보여줘서 ls -a를 했더니 종료된 container도 같이 보여줌! 싱기싱기
$ sudo docker run -it ubuntu
root@529413f2e0ab:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@529413f2e0ab:/# exit
exit
$ sudo docker run -it ubuntu
root@d60f63d62a45:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@d60f63d62a45:/# exit
exit
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d60f63d62a45 ubuntu "/bin/bash" 33 seconds ago Exited (0) 29 seconds ago blissful_spence
529413f2e0ab ubuntu "/bin/bash" 46 seconds ago Exited (0) 38 seconds ago strange_rhodes
20b1848ba865 ubuntu "ls /" 53 seconds ago Exited (0) 50 seconds ago recursing_hofstadter
206c023b11c3 ubuntu "ls /" 8 minutes ago Exited (0) 8 minutes ago dreamy_jones
💫 container마다 저장 공간이 분리되어 있어서 container를 없애면 container 내부에 작업한 것들은 다 사라진다
♻ volume을 사용하면 데이터가 사라지지 않고 남아 있게 됨!
-> host(내 컴퓨터)의 filesystem에 docker 영역을 만듦
-> container에 host 폴더를 마운트해 두면 host 폴더가 공유 폴더가 됨
-> 다른 container에서 host 폴더를 마운트해서 시작하면 container 간 데이터 공유가 가능해짐!
volume에 두가지 메인 타입이 있는데 일단 named volume을 사용해 볼 것임
2. todo 데이터를 고정하기
named volume : volume을 생성할 때 이름을 지정해주는 것.
volume의 이름만 알면 docker에서 접근할 수 있다!
$ sudo docker volume create todo-db
todo-db
$ sudo docker volume ls
DRIVER VOLUME NAME
local todo-db
$ sudo docker volume inspect todo-db
[
{
"CreatedAt": "2021-02-09T12:01:08+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]
기존에 돌고 있는 container는 지워주고 volume을 지정해서 container를 생성한다
$ sudo docker rm -f 49dd2e644745
49dd2e644745
$ sudo docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
로컬의 mount point와 container의 /etc/todos가 연결되어 데이터가 저장되어 있는 걸 아래처럼 확인 할 수 있다
$ sudo docker exec a4182f1cdfbf ls /etc/todos
todo.db
$ sudo ls /var/lib/docker/volumes/todo-db/_data
todo.db
todo.db는 todo app에서 만든 SQLite DB 파일로 todo app에서 /etc/todos에 todo.db를 만들게 했기 때문에
저 파일이 생긴 것.
요 container를 지우고 새로 container를 만들어도 todo.db는 살아있다!
$ sudo docker rm -f a4182f1cdfbf
a4182f1cdfbf
$ sudo docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
1badc8fb656c508b7fbcb75b05883bfc0d043bd95df59f8a501c9791fe36025a
$ sudo docker exec 1badc8fb656c ls /etc/todos
todo.db
'개발 > DevOps' 카테고리의 다른 글
Docker 내용, 기반 기술 정리 (0) | 2021.06.21 |
---|---|
[정리] prometheus vs graphite (0) | 2021.03.03 |
Docker docs 따라하기 - 4. bind mount를 사용하기 (0) | 2021.02.09 |
Docker docs 따라하기 - 2. online에서 docker 실행하기 (0) | 2021.02.09 |
Docker docs 따라하기 - 1. ubuntu18.04에 Docker 설치 (0) | 2021.02.08 |
댓글