코딩왕 미룡

[Docker] Volumes(볼륨) 본문

Docker

[Docker] Volumes(볼륨)

허미룡 2023. 6. 5. 18:59

◦ 도커가 인식하는 호스트 머신(내 컴퓨터)의 폴더

 도커 컨테이너 내부의 폴더에 매핑

 컨테이너에 정의된 경로는 생성된 어떤 볼륨에 매핑 → 호스트 머신 상의 생성된 어떠한 경로로 연결

   (도커에서 관리하므로 어떤 폴더인지는 알 수 없음, 엑세스 불가능)

 데이터를 읽고 쓸 수 있음

 컨테이너 외부에 데이터가 저장되는 것

 

💡 anonymous volume / named volume (하단에 사용법 참고)

    anonymous volum :

      - 컨테이너가 종료될 때 삭제, 컨테이너가 존재할 때만 데이터도 존재

      - 새로운 컨테이너가 생성될 때마다 사용하지 않는 익명 볼륨이 쌓임 → docker volume prune

         → docker volume rm [볼륨이름]

      - 컨테이너에 이미 존재하는 특정 데이터를 잠그는데 적합

        (데이터가 다른 모듈에 의해 덮어쓰여지는 것을 방지)

        보통 바인드 마운트와 함께 사용

 

     named volum :

      - 컨테이너가 종료된 이후에도 지속되며 폴더 유지

      - 새 컨테이너가 생성되면 볼륨이 복구되고 폴더가 복구되어 해당 폴더에 저장되니 모든 데이터 사용가능, 데이터를 유지

      - 컨테이너의 제거 시마다 손실되는 데이터 문제를 해결

      - 영구적이어야 하는 데이터나 편집, 혹은 직접 볼 필요가 없는 중요한 데이터에 적합

         (직접 호스트 머신의 폴더에 액세스하지 않을 것이기 때문)

          → 데이터를 편집할 수 있는 옵션이 있음

 

   🟥 Dockerfile 내부 명령으로 생성 불가능 (바인드 마운트와 동일)

        이미지에는 적용되지 않고 컨테이너에만 영향을 줌

       실제 이미지가 아니라 실행하는 컨테이너에만 적용되기 때문

 

   🟩 컨테이너 실행 (docker run -v name:/경로) 시 named volume 생성

      ◦ 볼륨이 존재하지 않으면 생성하고 존재하면 기존의 것을 사용

      ◦ 특정 컨테이너에 연결되어있는 것이 아님 (여러 컨테이너에서 공유가능)

 

   🟨 참고

   Dockerfile의 COPY명령과 Volume의 차이

      ◦ COPY : 복사를 명령한 경로와 파일의 스냅샷을 취한 다음 파일과 폴더를 이미지에 복사하는 것이 전부

                     지속적인 관계나 연결이 없으며 이미지에 복사되는 일회성 스냅샷

         - 스냅샷 : 마치 사진 찍듯이 특정 시점에 스토리지의 파일 시스템을 포착해 보관하는 기술

      ◦ Volume : 컨테이너 내부의 폴더를 호스트 머신 상의 컨테이너 외부 폴더에 연결할 수 있음

                       두 폴더의 변경 사항은 다른 폴더에 반영됨

                       → 데이터 유지 가능

                       호스트 머신에서 파일을 추가하면 컨테이너 내부에서 엑세스 가능하며

                      컨테이너가 매핑된 경로에 파일을 추가하면 호스트 머신에서도 사용 가능

 

 

사용법

anonymous volume (Dockerfile 내부 옵션으로 작성)

VOLUME [ "컨테이너 외부 폴더에 매핑되어질 내 컨테이너 내부 위치" ]

named volume

docker run -d -p 3000:80 —rm -v [원하는 볼륨이름]:[매핑될 컨테이너 내부 위치] [이미지 아이디 or 이미지 이름]