Cloud/Docker

Docker) Docker Volume 실습해보기

Adım Kim 2022. 10. 4. 21:19
실습 환경 : AWS console (2022/10), Visual Studio Code
실습 목적 : Docker Volume의 사용 방법에 대해 알아보고 실습해본다.

Docker Volume

  • Docker는 Union File System을 사용한다.
    하나의 이미지로부터 여러 container를 만들수 있는 방법을 제공한다.
  • 제공하는 서비스의 로직과 데이터는 반드시 분리되어야한다, application에서 발생한 여러가지 데이터에 영향을 주지않고 언제든 다른 container로 이전할수 있게 하여 운영자가 데이터를 안전하게 관리하고 운영할 수 있다.
  • Docker Volume은 container에서 생성, 재사용할 수 있고 host운영체제에서 직접전근 가능하다.
  • 보존되어야 하는 데이터를 유지하기 위한 매커니즘을 제공한다.
  • container내부 데이터는 container의 lifecyclel과 연관되어 있어(container 종료시 삭제된다.) Docker Volume을사용하여 Volume을 독립적으로 운영하는것이 좋다.


Docker Volume 종류

 

 

  1. volume
    • docker에서 권장하는 Docker Volume으로 docker 명령으로 관리된다.
    • volume 드라이버를 통해 원격 호스트 및 클라우드 환경에 volume 내용을 저장하고 암호화 가능하다.
    • 새 volume으로 지정될 영역에 데이터를 미리 채우고 container에 연결하면 데이터를 바로 사용 가능하다.

 

  1. bind mount
    • host의 file system 절대경로를 container에 직접 mount 한다.
    • volume과 마찬가지로 file system 영역에 데이터를 채우고 container에 연결하여 데이터 사용 가능하다.
    • 사용자가 파일/디렉토리를 생성하면 host의 file system 소유자 권한으로 연결된다.
    • container가 제거되도 host 디렉토리는 유지된다.

 

  1. tmpfs mount
    • tmpfs mount 방법은 임시적이며 host 메모리에서만 지속되므로 container가 중지되면 tempf mount가 제거되고 내부에 기록된 내용은 삭제된다.
    • host 또는 container는 Upperdir(읽기/쓰기영역)에서 지속사용가능하지 않는 임시 저장용도 사용시 유용하다.
    • tmpfs mount는 container실행시 지정하고 container 제거시 자동 해제된다.

 



Volume 실습해보기

Volume


(1)  Volume 생성

docker volume create my-share1

(2)  Volume 목록 확인

docker volume ls

(3)  Volume 상세 정보

docker volume inspect my-share1

(4)  Volume 저장위치 확인

ls -lF /var/lib/docker/volumes

(5)  Volume 에 파일 복사

sudo cp index.html /var/lib/docker/volumes/my-share1/_data

  #  필요한 경우 생성된 volume에 원하는 파일을 복사한다.


(6)  Volume을 container에 마운트하여 생성

docker run -dit --name server1 --mount source=my-share1,target=/mnt ubuntu:14.04

  # --mount 옵션으로 volume을 마운트한다.


 

docker run -dit --name server2 -v my-share1:/mnt ubuntu:14.04

  #  -v 옵션으로 volume을 마운트한다.
  #  -v 옵션으로 volume을 마운트하면 inspect로 상세정보 확인시, .HostConfit.Binds 항목과 .Mounts
     항목을 확인하면 mount된 volume의 정보를 확인할 수 있다.

  #  위 두개의 컨테이너 생성 후, 같은 볼륨을 공유하는것을 확인한다.


(7)  Volume 삭제

docker volume rm my-share1

  #  container에 mount된 상태에서 삭제는 불가능하다.




bind mount 실습해보기

bind mount


(1)  디렉토리 생성
mkdir calc-web

  # bind mount에 사용할 디렉토리 생성 및 필요한 파일을 복사한다.


(2)  container 생성

docker run -dit --name server1 --mount type=bind,source="$(pwd)",target=/mnt ubuntu:14.04

  --mount 옵션으로 bind mount로 지정된 디렉토리를 마운트한다.


docker run -dit --name server2 -v "$(pwd)":/mnt ubuntu:14.04

  #  -v 옵션으로 bind mount로 지정된 디렉토리를 마운트한다.


(3)  bind mount 확인

docker container inspect server2 -f "{{.HostConfig.Binds}}"

(4)  bind mount 삭제

rm -rf calc-web

  #  bind mount 디렉토리를 삭제할때 아무런 주의없이 삭제되므로 주의해야한다.