Docker 데이터 관리하기: Volume, Bind Mount

성연·2024년 2월 16일
0

Docker

목록 보기
7/8

도커에서 데이터를 관리하는 방법에 대해 정리해보고자 한다.

도커 컨테이너에 생성되는 모든 데이터는 컨테이너 이미지 레이어에 write 형식으로 저장된다. 해당 컨테이너가 더이상 존재하지 않으면 write된 레이어는 삭제(복구 불가능)된다. 이를 해결하기 위해 도커는 volumebind mount 옵션을 제공한다.


1. Docker volume

# docker volume create volume이름
$ docker volume create yoonsy
  • Docker에 의해 관리되는 호스트의 특정 파일시스템에 저장하는 방식이다.
    • 주로 호스트의 /var/lib/docker/volumes/ 경로에 저장된다.
  • Docker가 아닌 프로세스에서는 접근/조작이 불가능하다.
  • 도커 컨테이너의 동작과 별개로 생성이 가능하다. (컨테이너 생성 시 만들 수도 있음)
  • 여러 컨테이너에 동시에 마운트될 수 있다.
    • 마운트(mount): 저장장치에 접근할 수 있는 경로를 디렉토리 구조에 편입시키는 작업
      → 외부 파일 시스템의 데이터를 읽고 쓸 수 있게 하는 작업
      → 컨테이너가 종료되어도 호스트 시스템의 데이터가 보존된다

Docker 컨테이너에 volume 마운트하기

# docker run --name 컨테이너이름 -dt -v volume이름:마운트경로 이미지이름:태그
# -dt: 컨테이너는 백그라운드에서 실행시킬거고(-d), 터미널을 사용할 수 있게 해줘(-t)
# -v: yoonsy volume이 컨테이너 내부의 /root 경로에 마운트되게 할게
$ docker run --name yoonsy_container -dt -v yoonsy:/root python_jupyter:3.9

마운트 된 volume 다른 컨테이너에서 공유하기

$ docker run --name new_yoonsy_container -dt -v yoonsy:/root python_jupyter:3.9
또는
$ docker run --name new_yoonsy_container -dt --volumes-from yoonsy_container python_jupyter:3.9
  • 다른 이미지에서 생성한 컨테이너와도 volume 공유가 가능하다!

[실습] 마운트 된 volume 확인해보기

  1. yoonsy volume을 생성한다.

    $ docker volume create yoonsy

  1. yoonsy volume을 /root 디렉토리에 마운트하는 yoonsy_container 컨테이너를 생성한다.

    $ docker run --name yoonsy_container -dt -v yoonsy:/root python_jupyter:3.9

  1. yoonsy_container 컨테이너의 /root 디렉토리에 testfile.txt 파일을 생성한다.
    $ touch testfile.txt

  1. yoonsy volume을 공유하는 새로운 컨테이너 new_yoonsy_container를 생성한다.

    $ docker run --name new_yoonsy_container -dt -v yoonsy:/root python_jupyter:3.9
    또는
    $ docker run --name new_yoonsy_container -dt --volumes-from yoonsy_container python_jupyter:3.9

  1. new_yoonsy_container 컨테이너의 /root 디렉토리를 확인한다.

    testfile.txt 파일이 있는 것을 확인!



2. Docker bind mount

  • Docker volume을 사용하지 않고 호스트의 디렉토리에 직접 접근하는 방법이다.
    • 사용자의 소유자와 권한 때문에 실행/수정에 제한이 있을 수 있다. (보안취약) → Volume 형식이 더 선호됨
  • 호스트의 디렉토리와 서로 공유하여 컨테이너가 삭제되더라도 호스트에 데이터가 저장된다.
# docker run --name 컨테이너이름 -dt -v 호스트디렉토리:마운트경로 이미지이름:태그
# -dt: 컨테이너는 백그라운드에서 실행시킬거고(-d), 터미널을 사용할 수 있게 해줘(-t)
# -v: 호스트의 ~/Desktop 디렉토리가 컨테이너 내부의 /root 경로에 마운트되게 할게
$ docker run --name yoonsy_container -dt -v ~/Desktop:/root python_jupyter:3.9

  • bind mount 방법도 —-volumes-from 옵션을 사용할 수 있다.
    $ docker run --name new_yoonsy_container -dt --volumes-from yoonsy_container python_jupyter:3.9

0개의 댓글