CS/Docker

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

Warehaus 2022. 3. 17. 01:26

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