찾아보게 된 계기
rclone을 독커로 사용해보고 싶었습니다.
docker 컨테이너는 docker만 설치되면 모든 기기에서 사용할 수 있게 해줍니다.
그런데 rclone 컨테이너를 독커로 구동하지 않으면 당연히 다른 기기에서는 사용할 수 없게 되죠.
rclone까지 컨테이너로 만들 필요가 있었습니다
그러면 컨테이너에서 마운트한 볼륨을 host에서 접근할 수 있어야 합니다.
그래서 찾아보았고 docker는 당연히 이런 기능을 제공하고 있었습니다.
옵션 설명의 용어 설명
독커의 환경이 아래와 같다고 가정해봅시다.
컨테이너 볼륨 옵션이 이렇게 설정되어있습니다.
-v /hostmount:/client-mount
/hostmount와 client-mount는 대상입니다.
호스트 컴퓨터에는 다음과 같은 폴더에 서로 다른 장치가 마운트 되어있습니다.
(폴더 구조가 아닙니다. 마운트 구조입니다.)
/hostmount (dev1)
|-host-sub-mount1 (dev2)
|-host-sub-mount2 (dev3)
|-host-nested-mount (dev4)
컨테이너에는 아래와 같이 마운트 되어있습니다.
(폴더 구조가 아닙니다. 마운트 구조입니다.)
/client-mount (dev1)
|-client-sub-mount1 (dev5)
|-client-sub-mount2 (dev6)
|-client-nested-mount (dev7)
이 때 dev5 ~ dev7은 호스트에는 마운트되지 않고, 독커에만 마운트 된 파일 시스템입니다.
rclone과 같은 vfs로 마운트 된 파일 시스템이라고 볼수 있습니다.
이런 Configure bind propagation에서 말하는 용어를 번역해드리겠습니다.
original mount point는 위 예시에서 hostmount
를 의미합니다.
replica mount는 위 예시에서 clientmount
마운트를 의미합니다.
sub-mount는 original mount
와 replica mount
의 바로 아래에 있는 마운트를 의미합니다.
위 예시에서는 host-sub-mount1
host-sub-mount2
client-sub-mount1
client-sub-mount2
가 이에 해당합니다.
mount points nested는 중첩 마운트라고 번역 되는데, recursive 마운트를 의미합니다.
sub-mount
아래에 있는 마운트까지 포함됩니다.
host-nested-mount
와 client-nested-mount
가 해당됩니다.
bind propagation: shared
original mount의 sub mount가 replica mount에서 보이며, replica mount가 original mount에서 보입니다.
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
|-client-sub-mount1
|-client-sub-mount2
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-host-sub-mount1
|-host-sub-mount2
|-client-sub-mount1
|-client-sub-mount2
bind propagation: slave
단방향으로 마운트가 공유됩니다.
host의 마운트만 컨테이너로 공유됩니다.
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-host-sub-mount1
|-host-sub-mount2
|-client-sub-mount1
|-client-sub-mount2
bind propagation: private
서로 하위 마운트와 중첩 마운트를 볼수 없습니다.
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-client-sub-mount1
|-client-sub-mount2
bind propagation: rshared
shared와 비슷하나 recursive하게 작동합니다.
하위와 하위의 하위와 하위의 하위의 하위의….
끝까지 작동합니다.
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
|-host-nested-mount
|-client-sub-mount1
|-client-sub-mount2
|-client-nested-mount
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-host-sub-mount1
|-host-sub-mount2
|-host-nested-mount
|-client-sub-mount1
|-client-sub-mount2
|-client-nested-mount
bind propagation: rslave
역시 recursive하게 작동하며 host -> container 단방향으로 작동합니다
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
|-host-nested-mount
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-host-sub-mount1
|-host-sub-mount2
|-host-nested-mount
|-client-sub-mount1
|-client-sub-mount2
|-client-nested-mount
bind propagation: rprivate
기본값입니다.
마운트 된 공간만 공유됩니다.
host에서는 마운트 구조가 아래와 같아집니다.
/hostmount
|-host-sub-mount1
|-host-sub-mount2
|-host-nested-mount
container에서는 아래와 같은 마운트 구조를 가집니다.
/client-mount
|-client-sub-mount1
|-client-sub-mount2
|-client-nested-mount
답글 남기기