Docker volume
컨테이너 위에 있는 데이터는 일시적 데이터이기 때문에 볼륨 맵핑을 통해 영구적으로 데이터를 보존할 수 있게 한다.
뿐만아니라 컨테이너간 데이터의 공유가 필요할 때에도 볼륨을 사용하여 데이터를 주고 받을 수 있다.
로컬 파일 시스템과 도커 파일 시스템을 연결하기
docker run -v /home/lion/mydata:/data -it --name lion-v lion:0.3 /bin/bash
💡 로컬 파일 시스템 경로 /home/lion/mydata 와 도커에서 /data 를 맵핑하면서 lion-v 라는 이름으로 lion 이미지 에 0.3 태그 로 이미지를 만들어 접속하겠다
텍스트 파일을 각각의 경로에서 생성한뒤에 체크해보면 ?
# local - /home/lion/mydata
touch sample.txt
# container - /data
touch from_container.txt
# 로컬
ls -l /home/lion/mydata
# result
lion@likelion:~$ ls -l /home/lion/mydata
total 0
-rw-r--r-- 1 root root 0 Aug 3 09:16 from_container.txt
-rw-rw-r-- 1 lion lion 0 Aug 3 09:15 sample.txt
lion@likelion:~$
# 컨테이너
docker exec lion-v ls -l /data
# result
lion@likelion:~$ docker exec lion-v ls -l /data
total 0
-rw-r--r-- 1 root root 0 Aug 3 00:16 from_container.txt
-rw-rw-r-- 1 1001 1001 0 Aug 3 00:15 sample.txt
lion@likelion:~$
맵핑되었기 때문에 어디서 들여다 보든 같은 파일을 가지고 있다.
이제 컨테이너간 데이터 공유를 할 수 있게 해보자. 다시 언급하면 컨테이너는 영구적으로 데이터를 보관할 수 없기 때문에 영구적 보존을 위해서는 매핑이 필요하다. 그런데 컨테이너들 끼리 데이터 공유가 필요하다면 ??
보니까 로컬에 volume 을 생성하고 여기다가 맵핑을 하는 구조로 하는 것 같다.
docker volume ls
#
DRIVER VOLUME NAME
local 0bc8..
local 5f6f..
local 5f52..
local 6d2c..
local 8f60..
local 010c..
docker 명령어로 볼륨을 검색해보면 로컬에 뭐가 많이 있는데, 이건 Dockerfile 에서 설정해준 내용들이 자동지정 되면서 난수로 정해졌기 때문이다.
내가 원하는 볼륨을 하나 생성하자
docker volume create lion-v
# 결과
DRIVER VOLUME NAME
...
local lion-v
docker run -it --name lion-v4 -v lion-v:/data lion:0.3 /bin/bash
# touch ~
docker run --name lion-v5 -v lion-v:/data lion:0.3
docker exec lion-v5 ls -l /data
# v4 에서 만든 정보가 v5 에서도 확인 가능!
추가로 로컬에서도 해당 경로로 접근해서 들여다 볼수는 있는데 로컬의 파일 시스템과 직접적으로 연결하거나 한게 아니라 root 권한으로만 들여다 볼 수 있다.
docker volume inspect lion-v
# result
[
{
"CreatedAt": "2023-08-03T09:43:17+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/lion-v/_data",
"Name": "lion-v",
"Options": {},
"Scope": "local"
}
]
# 내용물 확인하기
sudo ls -l /var/lib/docker/volumes/lion-v/_data
'Dev. > Docker' 카테고리의 다른 글
[Cloud] 배포 - Docker : docker-compose.yml (0) | 2023.08.12 |
---|---|
[Cloud] 배포 - Docker : Dockerfile - Django (0) | 2023.08.11 |
[Cloud] 배포 - Docker : Dockerhub (0) | 2023.08.07 |
[Cloud] 배포 - Docker : Dockerfile (0) | 2023.08.06 |
[Cloud] 배포 - Shell Script : 자동실행 스크립트 (0) | 2023.08.02 |
댓글