본문 바로가기
CS/Docker

도커 볼륨 (Docker volume) 명령어를 활용한 데이터 보존 방법

by Warehaus 2022. 3. 17.

docker volume을 이용한  데이터 보존

 

안녕하세요 warehouse입니다.

 

오늘은 예전 포스팅에 이어서 도커볼륨 활용방법에 대해 다뤄보려고 합니다.

 

2022.03.06 - [CS/Docker] - [CS/Docker] 도커 볼륨 - Docker volume

 

[CS/Docker] 도커 볼륨 - Docker volume

2022.02.25 - [CS/Docker] - [도커] docker 컨테이너 목록 출력하기 / 실행 중인 컨테이너 확인 명령어 [도커] docker 컨테이너 목록 출력하기 / 실행 중인 컨테이너 확인 명령어 이번에는 docker 명령어를 이용

armin.tistory.com

 

 

도커볼륨을 활용하는 방법으로 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] mysql기반으로 동작하는 wordpress 만들어 보기 1

안녕하세요 Warehouse 입니다. 오늘은 도커를 이용해서 mysql, wordpress image를 켜서 블로그를 생성 해 봤습니다. Docker 책과 강의를 시작하면서 Mysql 기반 word process를 만들어 보다 요즘 C++ 과 Python..

armin.tistory.com

 

 

2022.03.15 - [CS/Docker] - docker container 를 이용한 mysql기반 wordpress 로 블로그 만들기 2 - MAC book 에서 다시 실행한 docker desktop