Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

Wisdom기록보관소

Docker Volume을 사용해보자!! 본문

Study!/Docker

Docker Volume을 사용해보자!!

DisCat 2022. 1. 14. 15:44

도커 Volume이란?

  • 파일 변경 사항을 UnionFS을 통해 관리! -> 이것 부터 무슨 얘기인지 잘 모르겠다
  • UnionFS : Unionfs is a filesystem service for Linux, FreeBSD and NetBSD which implements a union mount for other file systems. - 출처 위키피디아 UnionFS -
    리눅스용 파일 시스템 서비스라 합니다.
  • UnionFS는 이미지 layer와 write layer를 합쳐 컨테이너의 데이터를 관리하는데, 결국 컨테이너 삭제시 write layer도 삭제
    -> 컨테이너가 삭제되면 데이터도 역시나 같이 사라짐!

해결법?

  • volume을 옵션을 사용하자!
  • 저장소를 호스트의 저장소와 연결해서 컨테이너를 삭제해도 남아있게 필요한 데이터는 호스트 저장소에 남아있게하자!
  • docker-compose등 이용해서 컨테이너간에 저장소를 공유? 할때도 사용해서 유연하게 구성!

Volume 옵션

  1. 컨테이너의 디렉토리만 명시

    $ docker run -v (container volume directory) IMAGE 
  • 위와 같이 불륨 옵션에 값을 디렉토리 하나만 명시하면 자동으로 호스트에는 해쉬값으로 디렉토리가 하나 생성되고
    명시한 컨테이너의 경로와 매핑된다.

환경별 고려사항?

  • Linux기반 OS 경우 보통 /var/lib/docker/volume 경로에 해쉬값 이름으로 된 디렉토리확인가능
  • Mac, Windows의 경오 다시 이 볼륨을 관리하는 컨테이너 혹은 VM에서 관리가 되어 사용하는 환경에서는 해당 디렉토리가 생성되지는 않고 관리하는 VM? container에 생성되는 것으로 보인다.
  1. 호스트의 특정 디렉토리와 연결
  • 해쉬값등으로 저장이 되기 때문에 컨테이너가 삭제가 되거나 한다면 찾기 힘들수 있다
  • 볼륨도 접근하기 번거로운 곳에 위치가 되니 관리가 불편하진다
  • 그렇다면 내가 원하는 디렉토리와 연결을 해보자!!!
$ docker run -v (host directory):(container directory) IMAGE ...
  • 사용법은 아주 간단하다!!!
  • 이전사용법에서 간단히 ':' 앞에 원하는 호스트의 디렉토리를 명시해주면 된다
  • 호스트 경로를 상대경로로 잡으면 볼륨 관리하는 vm에 경로로 지정되는것인지 검색해서 찾은 디렉토리에도 공유된 디렉토리를 찾을 수 없다. Docker Desktop에서 볼륨을 관리하는 곳에서는 지정한 경로 이름으로 볼륨이 생성되는것은 확인 할 수 있었다. 앱에서도 직접 디렉토리로 접근하는게 아니라 파일을 받는 인터페이스를 제공하는 것으로 봐서는 VM에 볼륨을 관리하는게 아닐까 싶다.
  • 절대 경로로 지정시에는 확실히 호스트 환경의 디렉토리에 연결된걸 확인할 수 있었다. 공유된 저장소를 직접 관리하고 싶다면 절대경로로 호스트 환경의 디렉토리와 마운트 하는게 편한 방법이 될것 같다.
  • 호스트에 디렉토리가 없는 경우에는 자동으로 생성이 되고 이미 있는 경우에는 호스트에 있는 디렉토리 내용으로 덮어 씌워진다.
  1. 컨테이너간 공유

    $ docker run -it --volumes-from [공유할 컨테이너명] [이미지]

    위와같이 실행하면 생성된 컨테이너는 공유되어 있는 컨테이너의 공유디렉토리를 공유하게 된다. 호스트 저장소에 파일을 생성하면 연결한 컨테이너의 공유폴더에도 그 컨테이너에 위 옵션으로 적용한 컨테이너도 같은 디렉토리에 파일이 생성이된다.

  2. 볼륨생성
    위에서 상대경로처럼 불륨을 생성하면 도커자체가 관리하는 볼륨이 생성되었는데 이를 컨테이너를 만들때가 아닌 불륨만 생성할 수 있다.

    $ docker volume create --name [이름!!!]

다른 부족한 부분도 많을 텐데 하루종일 찾아봤는데 아직도 많이 부족하다. 차근이 실무나 테스트 프로젝트에 적용하면서 부족한 점을 체워 나가야 할텐데...

아무튼 여기까지..

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

Docker resource 관리를 해보자  (0) 2022.02.06
Docker 익히기~!  (0) 2020.07.27