본문 바로가기
Docker

[Docker] 볼륨과 바인드마운트

by greeng00se 2022. 8. 23.

개요

  • 컨테이너가 생성된 파일들은 쓰기 가능한 컨테이너 레이어에 저장됩니다.
  • 하지만 컨테이너가 존재하지 않으면 데이터가 유지되지 않습니다.
  • 볼륨을 사용하면 호스트에 파일이 저장되기 때문에 컨테이너가 제거되어도 파일이 유지되게 할 수 있습니다.

볼륨은 무엇일까요?

  • 볼륨은 도커 컨테이너가 생성하고 사용하는 데이터를 영구적으로 유지하기 위한 방법으로 Docker에 의해 관리됩니다.
  • 컨테이너가 제거되어도 삭제되면 안되는 파일들을 저장할 때 사용합니다.
  • 볼륨은 익명 볼륨과 명명된 볼륨으로 나누어집니다.

볼륨 사용

  • 도커를 실행할 때 -v 옵션을 이용하여 사용할 수 있습니다.
  • -v 옵션은 콜론으로 구분된 3개의 필드로 구성됩니다.
    • 예) docker run -d -v my-volume:/temp:ro --rm my-image
  • 첫 번째 필드
    • 명명된 볼륨의 경우 볼륨의 이름입니다. 익명 볼륨의 경우 해당 필드가 생략됩니다.
  • 두 번째 필드
    • 파일 또는 디렉토리가 컨테이너 내에서 마운트되는 경로입니다.
  • 세 번째 필드
    • 선택 사항으로 콤마로 구분된 옵션을 설정할 수 있습니다.
    • 예를들어 ro 옵션을 추가해 읽기 전용 볼륨으로 설정할 수 있습니다.

볼륨 관리와 생성

  • -v 옵션을 사용해서 볼륨을 설정한다면 볼륨이 자동으로 생성됩니다. 하지만 볼륨을 직접 생성할 수도 있습니다.
  • 볼륨 생성
    • docker volume create my-volume
  • 볼륨 리스트 확인
    • docker volume ls
  • 볼륨 정보 자세히 보기
    • docker volume inspect my-volume
  • 볼륨 삭제
    • docker volume rm my-volume

익명 볼륨(Anonymous Volumn)

  • docker run -v /app/data --rm my-image
  • 이름이 붙여지지 않은 볼륨입니다.
  • --rm 옵션을 사용하여 도커를 실행한다면 컨테이너가 종료될 때 자동으로 제거됩니다.
  • 외부 경로보다 컨테이너 내부 경로의 우선 순위를 높이는데 사용할 수 있습니다.
    • 바인드 마운트를 사용하여 폴더 전체를 읽기 전용으로 마운트 한 경우 특정 폴더가 쓰기 권한이 필요할 때 익명 볼륨을 사용할 수 있습니다.
    • 예) docker run -d -v $(pwd):/app:ro -v /app/node_modules --rm my-image

명명된 볼륨(Named Volume)

  • docker run -v my-volume:/app/data --rm my-image
  • 편집할 필요가 없거나 중요한 데이터를 저장할 때 적합합니다.
  • 볼륨을 사용하면 컨테이너간 데이터 공유를 안전하게 할 수 있습니다.

바인드 마운트(Bind Mount)

  • docker run -v 절대경로:/app/data --rm my-image
  • docker run -v $(pwd):/app/data --rm my-image
  • 볼륨을 직접 관리할 수 있고, 호스트 머신의 파일 또는 디렉터리가 컨테이너에 마운트됩니다.
  • 호스트 시스템의 절대 경로를 참조합니다.
  • 영구적이고 편집가능한 데이터에 적합합니다.
    • 애플리케이션을 개발하는 경우 소스코드가 들어있는 폴더를 바인드 마운트하여 이미지를 빌드하지 않고 실시간으로 최신 코드를 컨테이너에 올릴 수 있습니다.

참고 자료

'Docker' 카테고리의 다른 글

[Docker] 기본 명령어 정리  (0) 2022.08.18