ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker) Docker Volume 실습해보기
    Cloud/Docker 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 디렉토리를 삭제할때 아무런 주의없이 삭제되므로 주의해야한다.




    댓글

Designed by Tistory.