Docker persistent data 활용

leesj·2022년 3월 30일
0

컨테이너의 데이터를 데이터를 영속적(Persistent) 데이터로 활용할 수 있는 방법에 대한 정리

컨테이너를 삭제하면 컨테이너 계층에 저장돼 있던 데이터베이스의 정보도 삭제된다. 데이터를 컨테이너가 삭제되어도 영속적 데이터로 활용할 수 있는 방법들이 있는데 그중 가장 활용하기 쉬운 방식이 볼륨을 활용하는 것이다.

Stateless

  • 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계하는 것
  • 컨테이너 자체는 상태가 없고 상태를 결정하는 데이터는 외부로부터 제공받는다.

Stateful

  • Stateless 와 반대로 컨테이너가 데이터를 저장하고 있어 상태가 있는 경우
  • 스테이트풀한 컨테이너 설계는 컨테이너 자체에서 데이터를 보관하므로 지양하는 것이 좋다.

호스트와 볼륨 공유

  • -v 옵션을 사용하여 호스트의 디렉터리와 컨테이너의 디렉터리를 공유한다.
  • 호스트 디렉터리를 미리 생성하지 않아도 도커가 자동으로 이를 생성한다.
  • 호스트의 디렉터리와 동기화되는 것이 아니라 완전히 같은 디렉터리이다.
  • 디렉터리 단위의 공유뿐 아니라 파일 단위의 공유도 가능하며, 동시에 여러 개의 -v 을 사용 할 수 있다.
  • -v 옵션을 통한 호스트 볼륨 공유는 호스트의 디렉터리를 컨테이너의 디렉터리에 마운트한다.

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

// 예시: mysql 데이터베이스의 데이터를 저장하는 기본 디렉터리를 호스트의 /home/wordpree_db 와 공유한다.
-v /home/wordpress_db:/var/lib/mysql

case1
컨테이너와 호스트에 모두 파일이 없고 컨테이너에 파일을 쓰는 경우 호스트로 복사된다.

case2
컨테이너와 호스트에 모두 파일이 있고 마운트를 하는 경우 호스트의 디렉터리 내용이 컨테이너의 디렉터리에 덮어씌워진다

볼륨 컨테이너를 활용

  • -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것.
  • --volumes-from 옵션을 설정하면 -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있다.
  • 단, 직접 볼륨 공유 형태가 아닌 -v 옵션을 적용한 컨테이너를 통해 공유하는 것이다.
  • 여러개의 컨테이너가 동일한 컨테이너에 --volumes-from 옵션을 사용함으로써 볼륨을 공유해 사용할 수도 있다.
// 예시
--volumes-from volume_overide

도커가 관리하는 볼륨을 생성

  • docker volume 명령어를 사용하여 볼륨을 생성하고 활용
  • 볼륨을 생성할 때 플로그인 드라이버를 설정해 여러 종류의 스토리지 백엔드를 사용할 수 있다.
  • 도커 볼륨도 여러 개의 컨테이너에 공유되어 활용될 수 있다.
  • 볼륨은 디렉터리 하나에 상응하는 단위로 도커 엔진에서 관리함
  • 볼륨도 호스트 볼륨 공유와 마찬가지로 호스트에 저장 하지만 파일이 실제로 어디에 저장되는지 사용자에겐 추상화 되어 제공됨
    형태: [볼륨의 이름]:[컨테이너의 공유 디렉터리]
// 예시
# docker volume create --name [volume name] // 생성
# docker volume ls                          // 조회
# docker inspect --volume [volume name]     // 정보확인

// 컨테이너는 볼륨을 컨테이너의 /root/ 디렉터리에 마운트므로 /root 디렉터리에 파일을 쓰면 해당 파일이 볼륨에 저장됨
# -v myvolume:/root/ 

volume mount 와 bind mount

// mount 옵션으로 생성
--mount type=volume, source=myvolume, target=/root
// 호스트의 디렉터리를 컨테이너 내부에 마운트하는 경우 typebind 로 지정
--mount type=bind,, source=/home/wordpress_db, target=/home/testdir

0개의 댓글