본문 바로가기
Study/Docker

Day 3. 도커 볼륨이란?

반응형

도커 볼륨

  • 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존합니다
  • 도커 이미지(읽기 전용) + 도커 컨테이너(쓰기 가능)
  • 컨테이너 계층에는 원래 이미지에서 변경된 파일 시스템 등이 저장
  • 하지만 영속해야하는 데이터들 일 경우 해당 도커 컨테이너를 삭제하면 컨테이너 계층에 저장돼있던 데이터베이스의 정보도 삭제된다는 단점이 있습니다
  • 이러한 단점을 극복하기 위한 몇가지 방법을 제시하는데, 그 중 가장 쉬운 방법이 볼륨을 활용하는 것입니다

 

  • 방법 1: 호스트와 볼륨 공유
    • -v 옵션을 통해 [호스트의 공유 디렉토리]:[컨테이너의 공유 디렉토리] 를 설정하여 파일시스템을 sharing할 수 있다
      # sharing volumes
      
      docker run -d \
      --name wordpressdb_hostvolumn \
      -e MYSQL_ROOT_PASSWORD=password \
      -e MYSQL_DATABASE=wordpress \
      -v /Applications/jimin.joo/wordpress_db:/var/lib/mysql \
      mysql:5.7​
    • 호스트 공유 디렉토리 상황
    • 컨테이너 공유 디렉토리 상황
    • 추가 정보
      • MAC의 경우 공유할 호스트의 디렉토리 권한이 File Sharing이 가능하게 설정되어 있어야한다 ( Docker Desktop으로 쉽게 설정했으나, 실제 명령어로 설정하는 방법은 다시 알아보고 기술하겠습니다 )
      • 공유할 호스트의 디렉토리가 미리 생성되지 않아도 docker가 실행될때 자동으로 mkdir을 실행합니다
      • docker stop(컨테이너 종료), docker rm(이미지 삭제)을 해도 공유된 호스트의 디렉토리 내용은 삭제되지 않습니다
      • -v 옵션을 통한 호스트 볼륨 공유는 호스트의 디렉토리를 컨테이너의 디렉토리에 마운트합니다
        • 즉 공유할 호스트 디렉토리에 이미 파일이 존재한다면 공유할 컨테이너 디렉토리에 덮어씌워집니다

 

  • 방법 2: 볼륨 컨테이너
    • -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 방법입니다
    • 컨테이너를 생성할 때 --volumes-from 옵션을 설정하면 -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉토리를 공유할 수 있다 ( 간접적으로 공유받는 방식 )

 

  • 방법 3: 도커 볼륨
    • docker volume 명령어를 이용해 도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존하는 방법입니다
    • 볼륨을 생성할 때 플러그인 드라이버를 설정해 여러 종류의 스토리지 백엔드를 쓸 수 있습니다 ( 예제에서는 기본적으로 제공되는 local 드라이버를 이용해보겠습니다 )
    • 도커 볼륨도 호스트 볼륨 공유와 마찬가지로 호스트에 저장함으로써 데이터를 보존하지만 실제 어디에 저장되는지는 사용자가 알필요 없습니다
    • 볼륨 생성
      # volume
      docker volume create --name {myvolume}
    • 볼륨 리스트
      # volume
      docker volume ls
    • 생성된 도커 볼륨을 이용해 컨테이너에 마운트
      # docker volume
      docker run -i -t --name volume_test_container \
      -v myvolume:/root \
      ubuntu:14.04​




    •  도커 볼륨 정보 확인
      # docker volume inspect
      
      docker inspect --type volume myvolume
      
      docker volume inspect myvolume​

      • Driver: 볼륨이 쓰는 드라이버
      • Lavel: 볼륨을 구분하는 라벨
      • Mountpoint: 해당 볼륨이 실제로 호스트의 어디에 저장됐는지 위치
728x90
반응형

'Study > Docker' 카테고리의 다른 글

Day 2. 도커 컨테이너 다뤄보기  (0) 2021.08.25
Day 1. 도커(Docker)란?  (0) 2021.08.12