docker volume을 이용한 데이터 보존
안녕하세요 warehouse입니다.
오늘은 예전 포스팅에 이어서 도커볼륨 활용방법에 대해 다뤄보려고 합니다.
2022.03.06 - [CS/Docker] - [CS/Docker] 도커 볼륨 - Docker volume
도커볼륨을 활용하는 방법으로 docker volume 명령어를 사용할 수 있습니다.
이는 도커 자체에서 제공하는볼륨 기능으로 컨테이너 삭제에 따른 데이터 손실을 방지할 수 있는 하나의 방법이 될 것입니다.
Docker volume create
볼륨을 다루는 명령어는 'docker volume' 으로 시작하며, 생성하는 방법은 다음과 같습니다.
docker volume create
명령어 그대로 docker volume을 create 함을 의미합니다.
다음 명령어는 abc_volume이라는 볼륨을 생성합니다.
docker volume create --name abc_volume
docker volume 의 조회
volume의 조회는 'docker volume ls' 명령어를 사용합니다.
아래와 같이 driver, volume name 정보를 확인할 수 있습니다.
$ docker volume ls
DRIVER VOLUME NAME
local abc_volume
docker volume 테스트
이제 생성된 abc_volume을 사용하는 컨테이너를 생성 해 봅니다.
ubuntu:20.04 를 이미지를 이용해 보겠습니다.
$ docker run -i -t --name abc_volume_c -v abc_volume:/root/ ubuntu:20.04
이제 콘솔을 확인해보면 root 계정으로 로그인이 되었습니다.
볼륨을 테스트 해 보기위해 root directory에 파일을 생성하고 다른 ubuntu 이미지를 가동하여 볼륨 데이터가 잘 공유되는지 확인해 보려고 합니다.
/root/volume 파일을 생성 합니다.
I'm volume이라는 문장을 가진 파일입니다.
echo "I'm volume" >> /root/volume
cat /root/volume
I'm volume
새로운 ubuntu 실행
또 다른 ubuntu container 릉 생성하여 앞에서 생성 된 파일을 확인해 봅니다.
$ docker run -i -t --name abc_volume_c2 -v abc_volume:/root/ ubuntu:20.04
root@3949c28f364b:/#
# cat /root/volume
I'm volume
같은 파일인 volume 을 확인할 수 있습니다.
이는 docker volume명령어로 생성 한 볼륨을 여러 컨테이너에서 공유하고 활용할 수 있음을 의미합니다.
볼륨은 디렉토리 하나에 상응하는 단위로 도커엔진에서 관리합니다.
도커볼륨도 호스트 볼륨 공유와 마찬가지로 데이터를 호스트에 저장하며 ( 현재 저는 Docker desktop 을 사용하므로 호스트는 제 PC 를 의미합니다 ) 파일이 실제 어디에 저장되는지에 대한 정보는 사용자가 알 필요가 없습니다. ( 도커 컨테이너로 볼륨을 연결해서 사용하면 되기 때문에 )
docker inspect
docker inspect 명령어를 사용하면 abc_volume 이 실제 어디에 저장되어 있는지 알 수 있습니다.
이 명령어는 컨테이너, 이미지, 볼륨 같은 도커의 모든 정보를 확인할 때 사용되며, 조회하고자 하는 정보의 유형을 명시하기 위해서 --type 옵션에 image, volume 같은 값을 같이 입력해 줍니다.
$ docker inspect --type volume abc_volume
[
{
"CreatedAt": "2022-03-09T01:22:40Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/abc_volume/_data",
"Name": "abc_volume",
"Options": {},
"Scope": "local"
}
]
컨테이너가 아닌 외부에 데이터를 저장하고 컨테이는 그 데이터를 이용하여 동작하도록 설계하는 것을 Stateless하다고 말 합니다.
컨테이너 자체에는 상태를 가지고 있지 않고, 상태를 결정하는 데이터는 외부로 부터 제공받기 때문입니다.
컨테이너가 삭제될 지라도 데이터는 그대로 보존되기 때문에 stateless한 컨테이너 설계는 도커 사용 시 매우 바람직하다고 할 수 있습니다.
이와 반대되는 용어가 Stateful인데요, stateful한 설계는 컨테이너 자체에서 데이터 보관을 진행하기 때문에 기본적으로 지양하는 것이 좋다고 할 수 있겠습니다.
관련 포스팅
2022.03.05 - [CS/Docker] - [CS/Docker] mysql기반으로 동작하는 wordpress 만들어 보기 1
'CS > Docker' 카테고리의 다른 글
docker 명령어를 이용한 사설 레지스트리(private registry)기반 개인서버에 이미지 저장소 만들기 (0) | 2022.05.18 |
---|---|
docker log 확인하는 방법 / docker logs 명령에서 tail, since 사용하는 방법 (0) | 2022.04.15 |
docker container 를 이용한 mysql기반 wordpress 로 블로그 만들기 2 - MAC book 에서 다시 실행한 docker desktop (0) | 2022.03.15 |
[CS/Docker] 도커 볼륨 - Docker volume (0) | 2022.03.06 |
[CS/Docker] mysql기반으로 동작하는 wordpress 만들어 보기 1 (0) | 2022.03.05 |