Docker Volume

Hyuk4316·2024년 2월 14일
2

Docker

목록 보기
3/3
post-thumbnail

컨테이너 속 변경사항

Docker의 Container를 삭제하게 되면 컨테이너 내부 변경사항이 없어지게 됩니다. 예를들어 DB 컨테이너를 지우게 된다면 안에 있는 데이터가 사라지게 됩니다.

만약 파일을 보존하고 싶다면 Docker의 volume mount를 이용해 데이터를 보존할 수 있는데, 이는 실제 저장공간을 사용할 수 있도록 하는 것 입니다.

Volume

그렇다면 Docker Volume는 무엇일까요?

Docker는 Volume을 생성하고 컨테이너가 이를 기존의 파일 시스템과 같이 사용할 수 있도록 해줍니다.

실제 디렉토리를 할당해주는 bind mount와 달리 여러 장점이 있습니다.

  • bind mount 보다 백업과 자료 이전이 쉽다.
  • Docker CLI또는 Docker API를 통한 조작이 가능하다.
  • 리눅스, 윈도우즈 컨테이너 둘다에서 작동한다.
  • 여러 컨테이너에서 안전하게 공유된다.
  • 원격 호스트에 볼륨을 저장할 수 있도록 한다.
  • 컨테이너에 의해 미리 생성된 컨텐츠를 가질 수 있다.
  • 맥과 윈도우에서 bind mount보다 빠른 성능을 제공한다.
  • volume을 사용하면 이미지의 크기를 증가시키지 않을 수 있다.
  • 컨테이너의 lifecycle 밖에 존재한다. (컨테이너 생성과 소멸에 자유롭다)

tmpfs mount의 경우는 임시 파일 시스템을 이용하는 방법입니다

기본적인 사용법

옵션

--mount--volume(-v)를 사용해 volume를 사용할 수 있습니다.

--mount

$ docker run --mount <key>=<value>,...
keydescription
typebind, volume, tmpfs 등이 들어가는 값이다.
source, srcvolume의 이름이 들어간다. 이름이 없는 볼륨의 경우는 생략한다.
destination, dst, target컨테이너 내 어디에 mount될지 정하는 path가 들어간다.

--volume

$ docker run -v <volume name>:<container path>:<option,...>

Volume 생성

생성

$ docker volume create <name>

볼륨 리스트

$ docker volume ls

local           <name>

삭제

$ docker volume rm <name>

mount

run 명령을 실행할 때 다음과 같은 옵션을 통해 volume를 설정할 수 있습니다.
--mount source=<volume name>,target=<path>

$ docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

확인

마지막으로 inspect 명령어를 활용해 컨테이너가 어떻게 마운트 되었는지 확인할 수 있습니다.

$ docker inspect <container>

compose를 사용한 활용법

compose 파일 내에서도 볼륨을 선언하고 할당해줄 수 있습니다.

todo-database:
    # ...
    volumes:
      - database:/data/db

# ...
volumes:
  database:

출처

Docker Docs: Persis Data
Docker Docs: Volumes

profile
한국공학대학교 소프트웨어전공 23학번

0개의 댓글