Page History
Docker를 Docker 컨테이너에서 데이터부분을 분리하여, 외부 저장소로 관리하는 방법에 대해 알아보겠습니다.
도커는 volume를 관리할수 있는 명령을 제공해주며 다양한 스토리지를 사용할수 있습니다. (volume 에대한 설명은 생략)
도커는 또한 서버컨테이너를 쉽고 자유롭게 구동이 배포및 실행 가능한 장점이 있는반면, 볼륨개념을 이해하지 못하면 그동안 축적된 데이터의
휘발 위험성이 있습니다. 그래서 네트워크보다 먼저 개념을 잡고 휘발이 안되게하거나, 파편화된 스토리지를 잘 관리하는 방법이 필요합니다.
NFS를 이용하는 방법도 도커를 어떻게 사용하느에따라 약간의 차이는 있지만, 여기서는 Rancher-NFS(네트워크파일공유) 를 이용하는 방법을 알아보겠습니다. NFS를 이용하는 방법도 도커를 어떻게 사용하느에따라 차이가 있을뿐
그 컨셉은 유사하니, 각각 환경에 맞게 활용이 가능할것으로 보입니다.
실습환경
- 메인 OS : 우분투
- 도커 OS : CoreOS
- 도커툴 : Rancher ( https://rancher.com/docs/rancher/v1.6/en/rancher-services/storage-service/rancher-nfs/ )
<외부 스토리지가 설정된 모습>모습 >
외부 저장소는 도커객체를 여러개 가지고 있는 메인 OS에서 하는것이 유리하며
메인 OS OS에서 NFS서버를 구동을합니다. 여기서 사용되는 네트워크는 메인컴퓨터-도커객체간
통신이 될수있는 hostnetwork를 이용을 합니다. 네트워크로 접근만 가능 하면
독립된 파일서버기능만 가질수도 있으나, 외부 네트워크로 노출은 NFS의 보안구성상 추천하지는 않습니다.
- host : 192.168.56.1
- guest : 192.168.56.201 ~
...
Code Block | ||||
---|---|---|---|---|
| ||||
sudo apt-get update sudo apt-get install nfs-kernel-server sudo mkdir /docker_data sudo chown nobody:nogroup /docker_data # sudo vi /etc/exports # NFS for Docker /docker_data 192.168.56.0/24(rw,sync,no_root_squash,no_subtree_check) /docker_data 192.168.56.0/24 # Restart sudo systemctl restart nfs-kernel-server |
공유를 사용할 루트 디렉토리를 위와같이 NFS 공유가 될수있도록 공유 시스템을 준비를 합니다.
이것을 준비하는 호스트의 네트워크를 가진 컴퓨터의 IP는 Gateway 인 192.168.56.1 이 되겠습니다.
NFS를 사용하기위한 게스트 모듈 탑재
Rancher에서 Rancher-NFS 를 설치하면, 기존 구성된 도커에 도커 컨테이너에서 NFS를 이용한 스토리지 사용이 가능합니다.
주요옵션:
...
Code Block | ||||
---|---|---|---|---|
| ||||
version: '2' services: bitbucket: image: atlassian/bitbucket-server:5.6.1 environment: - BITBUCKET_HOME=/var/atlassian/application-data/bitbucket/ volumes: - gitdata:/var/atlassian/application-data/bitbucket ports: - 10000:7990/tcp labels: io.rancher.scheduler.affinity:host_label: host=docker1 io.rancher.container.hostname_override: container_name volumes: gitdata: driver: rancher-nfs driver_opts: exportBase: /bitbucket |
이전 이전 단계에서 rancher-nfs 드라이브가 설치되었으며, 원격의 스토리지 이용이 가능해졌습니다.
...
도커의 Data들이 한곳에 모이면서 백업및 관리를 할수가 있습니다.할수있게되었습니다.
공유디렉토리를 통해 언제든 Data를 확인및 수정이 가능합니다.
Storage가 UI로 관리되는 모습
우리가 사용하는 도커객체가 얼만큼의 Data 저장장치를 사용하는지 알수가 있으며, 여기서 관리되는 스토리지 데이터만 잘 백업을하고 유지를 한다고하면
도커 인스턴스를 새롭게 리셋을 한다고해도 복원이 가능해집니다. ON_REMOVE 의 옵션에따라 도커객체가 사라질때 호스트의 파일도 자동으로 사라질수 있으며
이옵션이 retain 일때 도커 저장소의 퍼시던트(영속성)를 유지할수 있게됩니다. 그렇지 않을시(purge)에는 컨테이너 삭제전 백업 에 유의를합니다.