프로그래밍 언어/Database

Docker에서 영구 저장소 (예 : 데이터베이스)를 처리하는 방법

Rateye 2021. 7. 14. 09:50
728x90
반응형

 

질문 : Docker에서 영구 저장소 (예 : 데이터베이스)를 처리하는 방법

사람들은 Docker 컨테이너의 영구 스토리지를 어떻게 처리합니까?

현재이 접근 방식을 사용하고 있습니다. 예를 들어 PostgreSQL 용 이미지를 빌드 한 다음 다음을 사용하여 컨테이너를 시작합니다.

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

IMHO는 단점이 있는데, "c0dbc34fd631"컨테이너를 삭제해서는 안된다는 것입니다.

또 다른 아이디어는 컨테이너에 호스트 볼륨 "-v"를 장착하는 것입니다, 그러나, 컨테이너 내의 사용자 ID는 반드시 호스트에서 사용자 ID와 일치하지 않는 한 다음 사용 권한이 엉망이 될 수 있습니다.

참고 : --volumes-from 'cryptic_id' --volumes-from my-data-container 를 사용할 수도 있습니다. 여기서 my-data-container 는 데이터 전용 컨테이너에 할당 한 이름입니다 (예 : docker run --name my-data-container ... (허용되는 답변 참조)

답변

볼륨 API 사용

docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command

즉, 데이터 전용 컨테이너 패턴은 새 볼륨을 위해 폐기되어야합니다.

실제로 볼륨 API는 데이터 컨테이너 패턴을 달성하는 더 좋은 방법 일뿐입니다.

-v volume_name:/container/fs/path 를 사용하여 컨테이너를 생성하면 Docker는 다음을 수행 할 수있는 명명 된 볼륨을 자동으로 생성합니다.

새로운 볼륨 API는 매달린 볼륨을 식별 할 수있는 유용한 명령을 추가합니다.

docker volume ls -f dangling=true

그런 다음 이름을 통해 제거하십시오.

docker volume rm <volume name>

@mpugach가 주석에 밑줄을 긋기 때문에 멋진 한 줄로 모든 매달려있는 볼륨을 제거 할 수 있습니다.

docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune

생산에 가장 적합한 접근 방식은 데이터 전용 컨테이너 를 사용하는 것입니다.

데이터 전용 컨테이너는 베어 본 이미지에서 실행되며 실제로 데이터 볼륨 노출 외에는 아무것도 수행하지 않습니다.

그런 다음 다른 컨테이너를 실행하여 데이터 컨테이너 볼륨에 액세스 할 수 있습니다.

docker run --volumes-from data-container some-other-container command-to-execute
  • 여기 에서 다양한 용기를 배열하는 방법에 대한 좋은 그림을 얻을 수 있습니다.
  • 여기 에 볼륨의 작동 방식에 대한 좋은 통찰력이 있습니다.

이 블로그 게시물 에는 데이터 전용 컨테이너 를 갖는 요점을 명확히하는 볼륨 패턴으로서의 컨테이너에 대한 좋은 설명이 있습니다.

Docker 문서에는 이제 볼륨 / s 패턴으로 컨테이너에 대한 DEFINITIVE 설명이 있습니다.

다음은 Docker 1.8.x 이하의 백업 / 복원 절차입니다.

지원:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm : 종료시 컨테이너 제거
  • --volumes-from DATA : DATA 컨테이너가 공유하는 볼륨에 연결
  • -v $ (pwd) : / backup : bind 현재 디렉토리를 컨테이너에 마운트합니다. tar 파일을 쓰려면
  • busybox : 작고 단순한 이미지-빠른 유지 관리에 좋습니다.
  • tar cvf /backup/backup.tar / data : / data 디렉토리에있는 모든 파일의 압축되지 않은 tar 파일을 만듭니다.

복원:

# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt

다음은 컨테이너와 데이터 컨테이너에 동일한 이미지를 사용하는 것이 좋은 이유를 설명 하는 훌륭한 Brian Goff의 멋진 기사입니다.

출처 : https://stackoverflow.com/questions/18496940/how-to-deal-with-persistent-storage-e-g-databases-in-docker
728x90
반응형