[docker] 고정 저장 장치 (예 : 데이터베이스)를 도커에서 처리하는 방법


Answers

Docker 릴리스 v1.0 에서는 지정된 명령으로 호스트 시스템에서 파일 또는 디렉토리의 마운트를 바인딩 할 수 있습니다.

$ docker run -v /host:/container ...

위의 볼륨은 도커를 실행하는 호스트의 영구 저장소로 사용할 수 있습니다.

Question

사람들이 고정 보관함에 영구 저장 장치를 어떻게 다룹니까? 현재이 방법을 사용하고 있습니다 : 예를 들어 Postgres 용 이미지를 빌드 한 다음

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

IMHO, 단점이 있습니다. 절대로 "c0dbc34fd631"컨테이너를 (실수로) 삭제하면 안됩니다.

또 다른 개념은 호스트 볼륨 "-v"를 컨테이너에 마운트하는 것입니다. 그러나 컨테이너 내의 사용자 ID 가 호스트의 사용자 ID 와 반드시 일치하지는 않으며 사용 권한이 엉망이 될 수 있습니다.

참고 : --volumes-from 'cryptic_id' of --volumes-from 'cryptic_id' 대신 --volumes-from my-data-container 에서 --volumes-from my-data-container 사용할 수 있습니다. 여기서 my-data-container 는 데이터 전용 컨테이너에 지정한 이름입니다 (예 : docker run --name my-data-container ... (수락 된 답변 참조)




@ tommasop의 대답은 좋으며 데이터 전용 컨테이너를 사용하는 몇 가지 메커니즘을 설명합니다. 하지만 처음에는 데이터 컨테이너가 (여러 다른 답변에서 제안한 것처럼) 호스트에 볼륨을 바인딩 할 수있을 때 바보 같았지만 실제로는 데이터 전용 컨테이너가 매우 깔끔하다는 사실을 깨달았지만 이제는 내 컨테이너를 제안 할 수 있습니다. 이 주제에 대한 블로그 게시물 : https://medium.com/@ramangupta/why-docker-data-containers-are-good-589b3c6c749e

또한 : 데이터 컨테이너를 사용하여 호스트에 대한 사용 권한 및 uid / gid 매핑과 같은 문제를 피하는 방법에 대한 예제는 " docker 공유 볼륨에 대한 사용 권한을 관리하는 가장 좋은 방법은 무엇입니까? " 라는 질문에 대한 나의 대답 .

OPs 원래 우려 사항 중 하나를 해결하려면 데이터 컨테이너를 삭제하면 안됩니다. 데이터 컨테이너가 삭제 되더라도 컨테이너 자체가 해당 볼륨에 대한 참조, 즉 --volumes-from 통해 볼륨을 마운트 한 모든 컨테이너가있는 한 데이터 자체는 손실되지 않습니다. 따라서 모든 관련 컨테이너가 중지되고 삭제되지 않으면 (우발적 인 rm -fr / 과 동일하다고 생각할 수 있음) 데이터는 안전합니다. 해당 볼륨에 대한 참조가있는 컨테이너 --volumes-from 를 수행하여 언제든지 데이터 컨테이너를 다시 만들 수 있습니다.

언제나 그렇듯이 백업을 만드십시오!

업데이트 : 이제 Docker에는 컨테이너와 별도로 관리 할 수있는 볼륨이 있으므로 관리가 더 쉬워졌습니다.







볼륨을 주변으로 이동 https://github.com/clusterhq/flockerhttps://github.com/clusterhq/flocker

README에서 :

Flocker는 데이터 볼륨 관리자 및 다중 호스트 Docker 클러스터 관리 도구입니다. 이를 통해 Linux에서 ZFS의 힘을 활용하여 무 상태 응용 프로그램에 사용하는 것과 동일한 도구를 사용하여 데이터를 제어 할 수 있습니다. 즉, Docker에서 데이터베이스, 대기열 및 키 - 값 저장소를 실행하고 나머지 앱처럼 쉽게 이동할 수 있습니다.




Postgres에 대한 데이터를 유지하기 위해 호스트에서 미리 정의 된 디렉토리를 사용하고 있습니다. 또한 이렇게하면 기존 Postgres 설치를 Docker 컨테이너로 쉽게 마이그레이션 할 수 있습니다. https://crondev.com/persistent-postgresql-inside-docker/




Docker 1.9에서 Update 5에서 선택한 답변을 확인할 수없는 경우 특정 컨테이너와 연결하지 않고 존재할 수있는 볼륨을 만들 수 있으므로 "데이터 전용 컨테이너"패턴이 쓸모 없게됩니다.

https://github.com/docker/docker/issues/17798을 참조 하십시오.

Docker 메인테이너는 데이터 전용 컨테이너 패턴이 약간의 디자인 냄새라고 인식하고 볼륨을 별도의 엔티티로 만들어 관련 컨테이너없이 존재할 수있게되었습니다.




도버 컨테이너 관리 및 스케줄링 도구 인 Kubernetes의 지속적 볼륨 요청 사용

http://kubernetes.io/docs/user-guide/persistent-volumes/

이 목적을 위해 Kubernetes를 사용하면 다음과 같은 이점이 있습니다.

  • NFS 나 기타 스토리지와 같은 스토리지를 사용할 수 있으며 노드가 다운 된 경우에도 스토리지를 사용할 필요는 없습니다.
  • 또한 이러한 볼륨의 데이터는 컨테이너 자체가 파괴 된 후에도 유지되도록 구성 할 수 있으므로 필요할 경우 다른 컨테이너에서 회수 할 수 있습니다.



Links



Tags

docker docker