Docker 003 | Docker Volume

This Is Empty.·2021년 11월 11일
0

Docker

목록 보기
3/3
post-thumbnail

What is Docker volume?

Docker image는 읽기 전용(read-only) 레이어의 시리즈로 저장된다. 우리가 컨테이너를 가동(run)하면 도커는 읽기 전용 이미지를 가져와서 맨 위에 읽기-쓰기(read-write) 계층을 추가한다. 실행중인 컨테이너가 기존 파일을 수정할 경우 파일이 기본 읽기 전용 계층에서 변경사항이 적용되는 최상위 읽기-쓰기 계층으로 복사된다. 읽기-쓰기 계층 버전은 기본 파일을 숨기지만 삭제하지는 않고 여전히 기본계층 안에 유지한다. 컨테이너가 삭제된 경우 이미지를 다시 실행하면 이전에 변경했던 사항(데이터)은 날아가고 새 컨테이너를 생성한다. 이는 복구할 수 없다.

이런 문제점을 해결하기 위한 방법 중 하나는 docker volume을 사용하는 것이다.

도커 볼륨은 docker container에서 생성하고 사용하는 데이터를 유지하기 위해 만들어졌다. 도커 볼륨은 사용하는 컨테이너의 크기를 늘리지 않고 볼륨의 컨텐츠가 지정된 컨테이너의 외부에 있기때문에 컨테이너의 read-write계층에 데이터를 유지하는 것보다 데이터를 보존하기에 안전한 방법이다.

도커 볼륨은 기본 유니온 파일 시스템 외부에 존재하며 호스트 파일 시스템에 일반 디렉토리 및 파일로 존재한다.

mount와 volume의 차이

  • bind mount
    호스트 시스템의 파일 또는 디렉토리가 컨테이너에 마운트 된다. 파일 또는 디렉토리는 호스트 시스템의 절대 경로로 참조된다.
    성능이 매우 우수하지만 특정 디렉토리 구조를 사용할 수 있는 호스트 시스템의 파일 시스템에 의존한다.
    호스트에 존재하지 않는 파일 또는 디렉토리를 마운트 할 경우 자동적으로 생성해주지 않고 에러를 반환한다.
  • volume
    호스트 시스템의 Docker 스토리지 디렉토리 내에 새 디렉토리가 생성되고 docker는 해당 디렉토리의 내용을 관리한다.
    호스트에 존재하지 않는 파일 또는 디렉토리를 마운트 하는 경우 엔드포인트를 생성하고 항상 디렉토리를 생성한다.

commands

  • 볼륨 생성
docker volume create [my-volume]
  • 볼륨 목록
docker volume ls
  • 볼륨 inspect
docker volume inspect [my-volume]
  • 볼륨 remove
docker volume rm [my-volume]

container에 volume 추가

docker run -d -it --name devtest -v "$(pwd)"/target:/app ngix:latest
  • -d : 백그라운드에서 컨테이너 실행
  • -it : 컨테이너를 종료하지 않고 터미널의 입력을 계속 컨테이너로 전달
  • --name [container-name] : 컨테이너에 이름 부여
  • -v : 호스트와 컨테이너간 볼륨 설정
  • "$(pwd)"/target:/app : 호스트 컴퓨터의 현재 디렉토리를 컨테이너의 /target:/app 경로로 마운트
  • ngix:latest : ngix 이미지 최신 버전 사용

docker volume 모두 제거

사용하지 않는 모든 볼륨 제거

docker volume prune

참고
Understanding Volumes in Docker
docker docs | Use volumes

profile
Convinced myself, I seek not to convince.

0개의 댓글