Swarm 모드 자체는 볼륨에 대해 다른 작업을 수행하지 않으며 컨테이너가 실행중인 노드에서 제공하는 모든 볼륨 마운트 명령을 실행합니다. 볼륨 마운트가 해당 노드에 로컬이면 데이터가 해당 노드에 로컬로 저장됩니다. 노드간에 데이터를 자동으로 이동하는 기본 제공 기능이 없습니다.
GlusterFS와 같은 일부 소프트웨어 기반 분산 스토리지 솔루션이 있으며 Docker에는 아직 GA되지 않은 Infinit이라는 솔루션이 있으며 EE의 Kubernetes 통합으로 뒷자리를 차지한 개발이 있습니다.
일반적인 결과는 애플리케이션 내에서 스토리지 복제를 관리해야하거나 (예 : etcd 및 기타 뗏목 기반 알고리즘) 외부 스토리지 시스템에서 마운트를 수행해야합니다 (자신의 HA를 사용하여). 외부 스토리지 시스템 마운트에는 블록 또는 파일 기반의 두 가지 옵션이 있습니다. 블록 기반 스토리지 (예 : EBS)는 일반적으로 더 높은 성능을 제공하지만 단일 노드에만 마운트되도록 제한됩니다. 이를 위해 일반적으로 도커 노드에 해당 블록 스토리지에 대한 액세스 권한을 부여하기 위해 타사 볼륨 플러그인 드라이버가 필요합니다. 파일 기반 저장소 (예 : EFS)는 성능이 낮지 만 이식성이 더 뛰어나고 여러 노드에 동시에 마운트 할 수 있으므로 복제 된 서비스에 유용합니다.
가장 일반적인 파일 기반 네트워크 저장소는 NFS (EFS에서 사용하는 것과 동일한 프로토콜)입니다. 타사 플러그인 드라이버 없이도 마운트 할 수 있습니다. 유감스럽게도 docker와 함께 제공되는 "local"볼륨 플러그인 드라이버는 드라이버 옵션을 사용하여 mount 명령에 원하는 값을 전달할 수있는 옵션을 제공하며 옵션없이 기본적으로 docker 디렉토리 / var / lib /에 볼륨을 저장합니다. 도커 / 볼륨. 옵션을 사용하면 NFS 매개 변수를 전달할 수 있으며 NFS 호스트 이름 (일반적으로 NFS에는없는 것)에 대한 DNS 조회도 수행합니다. 다음은 로컬 볼륨 드라이버를 사용하여 NFS 파일 시스템을 마운트하는 다양한 방법의 예입니다.
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
# inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.1.1,rw
device: ":/path/to/dir"
...
마지막에 compose 파일 예제를 사용하는 경우 볼륨 변경 (예 : 서버 경로 또는 주소 업데이트)이 존재하는 한 기존의 명명 된 볼륨에 반영되지 않습니다. swarm이 새 값으로 다시 만들 수 있도록 볼륨의 이름을 바꾸거나 삭제해야합니다.
대부분의 NFS 사용에서 볼 수있는 또 다른 일반적인 문제는 서버에서 "루트 스쿼시"를 활성화하는 것입니다. 이로 인해 루트로 실행되는 컨테이너가 볼륨에 파일을 쓰려고 할 때 권한 문제가 발생합니다. 또한 컨테이너 UID / GID가 볼륨에 쓰기위한 권한이 필요한 경우 유사한 UID / GID 권한 문제가 있습니다.이 경우 NFS 서버에서 디렉토리 소유권 및 권한을 조정해야 할 수 있습니다.