Docker Volume :: 컨테이너를 삭제해도 데이터는 삭제되지 않도록 설계하기

이주희·2022년 10월 26일
0

Docker

목록 보기
7/16

Stateless한 컨테이너 설계하기

👍🏻 Stateless

  • 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계하는 것을 스테이트리스하다고 한다.

  • 컨테이너 자체는 상태가 없고 상태를 결정하는 데이터는 외부로부터 제공받는다.

  • 컨테이너가 삭제되어도 데이터는 보존되므로 도커를 사용할 때 바람직한 설계이다.

👎🏻 Stateful

  • 컨테이너가 데이터를 저장하고 있어 상태가 있는 경우 스테이트풀하다고 말한다.

  • 컨테이너 자체에서 데이터를 보관하므로 지양하는 것이 좋다.


도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존한다.
이미 생성된 이미지는 어떠한 경우로도 변경되지 않으며, 컨테이너 계층에 원래 이미지에서 변경된 파일시스템 등을 저장한다.
따라서, 컨테이너를 삭제하면 컨테이너 계층에 저장돼 있던 정보도 삭제되고, 이는 복구할 수 없다.

이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 수 있는 방법을 알아보자!


1. 호스트와 볼륨을 공유하기

호스트의 디렉터리를 컨테이너의 디렉터리에 마운트한다.

-v [호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]

docker run
...
-v /home/wordpress_db:/var/lib/mysql
...
  • run 명령어의 옵션 -v를 사용한다.
    ([호스트의 공유 디렉터리][컨테이너의 공유 디렉터리]를 공유한다.)

  • [호스트의 공유 디렉터리]를 호스트에 생성하지 않았어도 도커가 자동으로 생성해준다.

  • 컨테이너의 디렉터리호스트의 디렉터리는 동기화되는 것이 아니라 완전히 같은 디렉터리이다!

  • 디렉터리 단위의 공유뿐 아니라 단일 파일 단위의 공유도 가능하다.

  • 동시에 여러 개의 -v 옵션을 쓸 수도 있다.

  • 이미지에 원래 존재하던 디렉터리에 호스트의 볼륨을 공유하면 컨테이너의 디렉터리 자체가 덮어씌워진다.
    (-v 옵션을 통한 호스트 볼륨 공유는 호스트의 디렉터리컨테이너의 디렉터리에 마운트한다.)


2. 볼륨 컨테이너 활용하기

2-1. 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하기

  • 컨테이너를 생성할 때 --volumes-from옵션을 설정하면, -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있다.

  • 직접 볼륨을 공유하는 것이 아닌 -v 옵션을 적용한 컨테이너를 통해 공유하는 것이다.

2-2. 볼륨 컨테이너로서 활용하기

  • 여러 개의 컨테이너가 동일한 컨테이너에 --volumes-from 옵션을 사용함으로써 볼륨을 공유해 사용할 수도 있다.

  • 호스트에서 볼륨만 공유하고 별도의 역할을 담당하지 않는 일명 '볼륨 컨테이너'로서 활용하는 것도 가능하다.

  • 볼륨을 사용하려는 컨테이너에 -v 옵션 대신 --volumes-from 옵션을 사용함으로써 볼륨 컨테이너에 연결해 데이터를 간접적으로 공유받는 방식이다.


3. 도커가 관리하는 볼륨 생성하기

도커 자체에서 제공하는 볼륨 기능 활용해 데이터를 보존할 수 있다.

  • 여러 개의 컨테이너에 공유되어 활용될 수 있다.

3-1. 볼륨 생성

// 1. 볼륨 생성
docker volume create --name 볼륨이름

// 1-1. 볼륨을 사용하는 컨테이너 생성
docker run -i -t --name 컨테이너명
-v [볼륨이름]:[컨테이너의 공유 디렉터리]

// 2. 볼륨 생성과 컨테이너 생성 한번에 하기 (볼륨 이름은 무작위 생성됨)
docker run -i -t --name 이름
-v /root
이미지

볼륨을 사용하는 컨테이너 생성 예시

([컨테이너의 공유 디렉터리] -> /root/)
/root 디렉터리에 마운트하므로 /root 디렉터리에 파일을 쓰면 해당 파일이 볼륨에 저장된다.

3-2. 볼륨 정보 확인

// 볼륨 목록
docker volume ls

// 볼륨 마운트에 대한 정보
docker container inspect volume_auto
👉🏻 출력 결과의 'Source' 항목에 정의된 디렉터리 확인!

3-3. 볼륨 삭제

도커 볼륨을 사용하고 있는 컨테이너를 삭제해도 볼륨이 자동을 삭제되지 않는다.

// 사용되지 않는 볼륨을 한꺼번에 삭제하기
docker volume prune
profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글