Làm cách nào tôi có thể sao lưu Docker-container với khối lượng dữ liệu của nó?


151

Tôi đã sử dụng tutum / wordpress hình ảnh Docker này để trình diễn một trang web Wordpress. Gần đây tôi phát hiện ra rằng hình ảnh sử dụng khối lượng cho dữ liệu MySQL.

Vì vậy, vấn đề là ở đây: Nếu tôi muốn sao lưu và khôi phục vùng chứa, tôi có thể thử cam kết một hình ảnh, sau đó xóa vùng chứa và tạo một vùng chứa mới từ hình ảnh đã cam kết. Nhưng nếu tôi làm điều đó, âm lượng sẽ bị xóa và tất cả dữ liệu của tôi sẽ biến mất.

Phải có một số cách đơn giản để sao lưu container của tôi cộng với dữ liệu âm lượng của nó nhưng tôi không thể tìm thấy nó ở bất cứ đâu.


Kiểm tra kịch bản này tôi đã viết để sao lưu hoàn toàn mọi thứ trong dự án docker, bao gồm các khối lượng được đặt tên và không tên, hình ảnh, cấu hình, nhật ký, hệ thống tập tin gốc container, cơ sở dữ liệu và nhiều hơn nữa: docker-compose-backup.sh .
Nick Sweeting

Câu trả lời:


141

nếu tôi muốn hoàn nguyên vùng chứa, tôi có thể thử cam kết một hình ảnh, sau đó xóa vùng chứa đó và tạo một vùng chứa mới từ hình ảnh đã cam kết. Nhưng nếu tôi làm điều đó, âm lượng sẽ bị xóa và tất cả dữ liệu của tôi sẽ biến mất

Như hướng dẫn sử dụng docker giải thích, khối lượng dữ liệu có nghĩa là duy trì dữ liệu bên ngoài hệ thống tập tin chứa. Điều này cũng dễ dàng chia sẻ dữ liệu giữa nhiều container.

Mặc dù Docker sẽ không bao giờ xóa dữ liệu theo khối lượng (trừ khi bạn xóa vùng chứa được liên kết với docker rm -v), các khối lượng không được tham chiếu bởi bất kỳ vùng chứa docker nào được gọi là khối lượng lơ lửng . Những khối lượng lơ lửng đó rất khó để thoát khỏi và khó tiếp cận.

Điều này có nghĩa là ngay khi bộ chứa cuối cùng sử dụng một ổ đĩa bị xóa, khối lượng dữ liệu sẽ trở nên lơ lửng và nội dung của nó khó có thể truy cập được.

Để ngăn chặn các khối lượng lơ lửng đó, mẹo là tạo một thùng chứa docker bổ sung bằng cách sử dụng khối lượng dữ liệu bạn muốn duy trì; do đó sẽ luôn có ít nhất là container docker tham chiếu âm lượng. Bằng cách này, bạn có thể xóa bộ chứa docker chạy ứng dụng wordpress mà không mất quyền truy cập vào nội dung khối lượng dữ liệu đó.

Container như vậy được gọi là container khối lượng dữ liệu .

Phải có một số cách đơn giản để sao lưu container của tôi cộng với dữ liệu âm lượng nhưng tôi không thể tìm thấy nó ở bất cứ đâu.

sao lưu hình ảnh docker

Để sao lưu hình ảnh docker, sử dụng lệnh lưu docker sẽ tạo ra một kho lưu trữ tar có thể được sử dụng sau này để tạo một hình ảnh docker mới với lệnh tải docker .

container dự phòng

Bạn có thể sao lưu một container docker bằng các phương tiện khác nhau

  • bằng cách cam kết một hình ảnh docker mới dựa trên trạng thái hiện tại của container docker bằng lệnh commit docker
  • bằng cách xuất hệ thống tệp chứa docker dưới dạng lưu trữ tar bằng lệnh xuất docker . Sau này bạn có thể tạo một hình ảnh docker mới từ kho lưu trữ tar đó bằng lệnh nhập docker .

Xin lưu ý rằng các lệnh đó sẽ chỉ sao lưu hệ thống tệp lớp chứa bộ chứa docker. Điều này không bao gồm khối lượng dữ liệu .

sao lưu khối lượng dữ liệu docker

Để sao lưu một khối lượng dữ liệu, bạn có thể chạy một thùng chứa mới bằng cách sử dụng ổ đĩa bạn muốn sao lưu và thực hiện lệnh tar để tạo một kho lưu trữ nội dung âm lượng như được mô tả trong hướng dẫn sử dụng docker .

Trong trường hợp cụ thể của bạn, khối lượng dữ liệu được sử dụng để lưu trữ dữ liệu cho máy chủ MySQL. Vì vậy, nếu bạn muốn xuất một kho lưu trữ tar cho tập này, trước tiên bạn cần dừng máy chủ MySQL. Để làm như vậy, bạn sẽ phải dừng container wordpress.

sao lưu dữ liệu MySQL

Một cách khác là kết nối từ xa với máy chủ MySQL để tạo kết xuất cơ sở dữ liệu bằng lệnh mysqldump . Tuy nhiên, để điều này hoạt động, máy chủ MySQL của bạn phải được cấu hình để chấp nhận các kết nối từ xa và cũng có người dùng được phép kết nối từ xa. Đây có thể không phải là trường hợp với hình ảnh docker wordpress bạn đang sử dụng.


Biên tập

Docker gần đây đã giới thiệu các plugin khối lượng Docker cho phép ủy quyền xử lý khối lượng cho các plugin được thực hiện bởi các nhà cung cấp.

Các docker run lệnh có hành vi mới cho -vtùy chọn. Bây giờ có thể truyền cho nó một tên khối lượng . Các tập được tạo theo cách đó được đặt tên và dễ dàng tham khảo sau này, giảm bớt các vấn đề với khối lượng lơ lửng .

Chỉnh sửa 2

Docker giới thiệu docker volume prune lệnh để xóa tất cả các khối lượng lơ lửng một cách dễ dàng.


33
Trên thực tế, tôi quan tâm nhiều hơn đến việc tạo ra một container mà tôi có thể di chuyển dễ dàng, tôi không hiểu điểm của một container không thể di chuyển.
pguardiario

Trong trường hợp đó, bạn nên xem các công cụ giúp quản lý khối lượng dữ liệu Docker cho bạn, chẳng hạn như Flocker
Thomasleveil

9
Docker không tự động xóa khối lượng dữ liệu. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. vì vậy dữ liệu chỉ chứa các dữ liệu là di sản
Andrii Zarubin

1
bạn không cần kết nối từ xa cho mysqldump. Chỉ cần shell vào container, đổ nó, và sau đó sao chép nó ra docker cp.
jiggunjer

@AndriiZarubin re: data only container obsolete?Không hề. Container chỉ chứa dữ liệu cung cấp cho bạn một container docker exec data-container tar -czf snapshot.tgz /datasau đó docker cp data-container:snapshot.tgz ./snapshot.tgzvà tương tự. Nếu bạn muốn container tồn tại lâu, thì hãy thực hiện lệnh của nó một cái gì đó giống như tail -f /dev/nullnó không bao giờ thoát ra, sử dụng các tài nguyên tối thiểu.
Jesse Chisholm

31

CẬP NHẬT 2

Tập lệnh bash sao lưu khối lượng thô:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Tập lệnh bash khôi phục khối lượng đơn thô:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Cách sử dụng có thể như thế này:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Giả định là: tập tin sao lưu có tên backup.tar, nó nằm trong cùng thư mục với tập lệnh sao lưu và khôi phục, tên tập tin giống nhau giữa các container.

CẬP NHẬT

Dường như với tôi rằng sao lưu khối lượng từ các thùng chứa không khác với khối lượng sao lưu từ các thùng chứa dữ liệu.

Các tập không có gì khác ngoài các đường dẫn được liên kết đến một container nên quá trình này là như nhau.

Tôi không biết nếu sao lưu docker cũng hoạt động cho cùng một khối lượng container nhưng bạn có thể sử dụng:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

và:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

CẬP NHẬT KẾT THÚC

Có một công cụ tuyệt vời này cho phép bạn sao lưu và khôi phục các thùng chứa khối lượng docker:

https://github.com/discordianfish/docker-backup

nếu bạn có một container được liên kết với một số khối lượng như thế này:

$ docker run --volumes-from=my-data-container --name my-server ...

bạn có thể sao lưu tất cả các khối lượng như thế này:

$ docker-backup store my-server-backup.tar my-server

và khôi phục như thế này:

$ docker-backup restore my-server-backup.tar

Hoặc bạn có thể làm theo cách chính thức:

Làm cách nào để chuyển khối lượng dữ liệu chỉ từ máy chủ này sang máy chủ khác?


Không, đó không phải là tình huống "--volume-from", thay vào đó, các khối lượng được xác định trong dockerfile, nguyên nhân khiến dữ liệu không tồn tại. Nếu bạn nhìn vào dockerfile cho tutum / đèn bạn sẽ thấy ý tôi là gì.
pguardiario

Câu trả lời tôi đã đưa ra là tốt cho bất kỳ loại âm lượng nào vì khối lượng là khối lượng và thùng chứa là container không có sự khác biệt nếu bạn sử dụng một thùng chứa làm vật chứa dữ liệu từ góc độ khối lượng
tommasop

Khối lượng được xác định trong dockerfile bị phá hủy khi container bị phá hủy. Vì vậy, không có cách nào để lấy lại dữ liệu đó khi bạn di chuyển container.
pguardiario

bạn phải lấy dữ liệu ra trước khi di chuyển container sau đó khởi chạy lại container và đưa dữ liệu trở lại
tommasop

1
Tôi nhận được một lỗi: Có unknown shorthand flag: 'r' in -rm.nên --rmkhông? (Docker phiên bản 18.09.5, bản dựng e8ff056)
kuga

21

Nếu bạn chỉ cần sao lưu khối lượng gắn kết, bạn chỉ có thể sao chép các thư mục từ Dockerhost của bạn .

Lưu ý: Nếu bạn đang sử dụng Ubuntu , Dockerhost là máy cục bộ của bạn. Nếu bạn đang dùng Mac , Dockerhost là máy ảo của bạn.

Trên Ubuntu

Bạn có thể tìm thấy tất cả các thư mục có khối lượng tại đây: /var/lib/docker/volumes/vì vậy bạn có thể sao chép chúng và lưu trữ bất cứ nơi nào bạn muốn.

Trên MAC

Nó không dễ dàng như trên Ubuntu. Bạn cần sao chép các tập tin từ VM.

Dưới đây là tập lệnh về cách sao chép tất cả các thư mục có khối lượng từ máy ảo (nơi máy chủ Docker đang chạy) vào máy cục bộ của bạn. Chúng tôi giả định rằng VM máy docker của bạn có tên mặc định .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Nó sẽ tạo một thư mục ./backup_volume trong thư mục hiện tại của bạn và sao chép tất cả các tập vào thư mục này.

Dưới đây là tập lệnh về cách sao chép tất cả các ổ đĩa đã lưu từ thư mục cục bộ của bạn ( ./backup_volume ) vào máy Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Bây giờ bạn có thể kiểm tra nếu nó hoạt động bằng cách:

docker volume ls

Chúng ta có cần tắt máy chứa để tạo bản sao lưu của thư mục đó /var/lib/docker/volumestrong Ubuntu không?
onknows

2
Không cần thiết, bạn có thể sao chép thư mục đó bất cứ lúc nào bạn muốn.
Andrii Dvoiak

4
Về mặt kỹ thuật có, bạn có thể, nhưng bạn đã tiếp xúc với các vấn đề tham nhũng dữ liệu vì bản sao không phải là nguyên tử và có thể có ghi đồng thời vào ổ đĩa, trước tiên tôi nên dừng container.
Alessandro S.

13

Hãy nói tên âm lượng của bạn là data_volume. Bạn có thể sử dụng các lệnh sau để sao lưu và khôi phục âm lượng đến và từ hình ảnh docker có tên data_image:

Để sao lưu:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Để khôi phục lại:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

Đây có phải là một bản sao lưu thời gian thực?
Kang Andrew

2
Vì cùng một âm lượng có thể được gắn trên nhiều docker, nên đây là sao lưu thời gian thực. Ví dụ. khối lượng được gắn trên một thùng chứa Mysql có thể được sao lưu (giả sử không có hỏng dữ liệu). Nhưng đối với các dịch vụ cần phải dừng lại vì sợ tham nhũng dữ liệu, thì đây không phải là thời gian thực.
Sahil Ahuja

9

Tôi biết điều này đã cũ, nhưng tôi nhận ra rằng không có một giải pháp nào được ghi chép rõ ràng để đẩy một thùng chứa dữ liệu (như bản sao lưu) đến docker hub. Tôi vừa xuất bản một ví dụ ngắn về cách làm như vậy tại https://dzone.com/articles/docker-backup-your-data-volume-to-docker-hub

Sau đây là điểm mấu chốt

Hướng dẫn docker đề nghị bạn có thể sao lưu và khôi phục khối lượng dữ liệu cục bộ. Chúng tôi sẽ sử dụng kỹ thuật này, thêm một vài dòng nữa để sao lưu này được đẩy vào trung tâm docker để phục hồi dễ dàng trong tương lai tới bất kỳ vị trí nào chúng tôi mong muốn. Vậy hãy bắt đầu. Đây là các bước để làm theo:

Sao lưu khối lượng dữ liệu từ bộ chứa dữ liệu có tên data-container-to-backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Mở rộng tệp tar này vào một thùng chứa mới để chúng tôi có thể cam kết nó là một phần của hình ảnh của nó

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Cam kết và đẩy hình ảnh với một thẻ mong muốn ($ VERSION)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Cuối cùng, hãy dọn dẹp

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Bây giờ chúng ta có một hình ảnh có tên là sao lưu dữ liệu trong repo của chúng ta, đó đơn giản là một hệ thống tệp với các tệp và thư mục sao lưu. Để sử dụng hình ảnh này (còn gọi là khôi phục từ bản sao lưu), chúng tôi thực hiện như sau:

Chạy bộ chứa dữ liệu với hình ảnh sao lưu dữ liệu

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Chạy hình ảnh whatEver của bạn với các khối từ trình tạo dữ liệu

docker run --volumes-from=data-container repo/whatEver

Đó là nó.

Tôi đã ngạc nhiên không có tài liệu cho công việc này xung quanh. Tôi hy vọng ai đó tìm thấy điều này hữu ích. Tôi biết phải mất một thời gian để suy nghĩ về điều này.


8

Nếu dự án của bạn sử dụng docker-compose, đây là một cách tiếp cận để sao lưu và khôi phục khối lượng của bạn.

docker-compose.yml

Về cơ bản, bạn thêm db-backupdb-restoredịch vụ vào tệp docker-compose.yml và điều chỉnh nó cho tên của âm lượng của bạn. Khối lượng của tôi được đặt tên dbdatatrong ví dụ này.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Tránh tham nhũng

Để thống nhất dữ liệu, hãy dừng bộ chứa db của bạn trước khi sao lưu hoặc khôi phục

docker-compose stop db

Sao lưu

Để sao lưu đến đích mặc định ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

Hoặc, nếu bạn muốn chỉ định một tên mục tiêu thay thế, hãy làm:

docker-compose run --rm -e TARGET=mybackup db-backup

Khôi phục

Để khôi phục từ backup/dbdata.tar.bz2, hãy làm:

docker-compose run --rm db-restore

Hoặc khôi phục từ một tệp cụ thể bằng cách sử dụng:

docker-compose run --rm -e SOURCE=mybackup db-restore

Tôi đã điều chỉnh các lệnh từ https://loomchild.net/2017/03/26/backup-restore-docker-named-volume/ để tạo phương pháp này.


5

Lệnh sau sẽ chạy tar trong một thùng chứa với tất cả các khối dữ liệu được đặt tên và chuyển hướng đầu ra thành một tệp:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Đảm bảo kiểm tra kho lưu trữ kết quả trong trường hợp có lỗi xảy ra:

tar -tjf data-volumes.tar.bz2

4

Nếu bạn chỉ cần một bản sao lưu đơn giản vào kho lưu trữ, bạn có thể thử tiện ích nhỏ của tôi: https://github.com/loomchild/volume-backup

Thí dụ

Sao lưu:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

sẽ lưu trữ khối lượng được đặt tên some_volumeđể/tmp/archive1.tar.bz2 lưu trữ tập tin

Khôi phục:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

sẽ xóa và khôi phục khối lượng được đặt tên some_volumetừ /tmp/archive1.tar.bz2tệp lưu trữ.

Thông tin thêm: https://medium.com/@loomchild/backup-restore-docker-named-volume-350394b8e362


Tôi đã tạo một công cụ tương tự github.com/01e9/docker-backup Nó tạo lưu trữ sao lưu và thêm chúng vào thư mục đồng bộ hóa Resilio
Oleg

2

Tôi đã tạo ra một công cụ để sắp xếp và khởi chạy sao lưu dữ liệu và bộ chứa mysql, đơn giản gọi là docker-backup . Thậm chí còn có một hình ảnh sẵn sàng để sử dụng trên hub docker .

Nó chủ yếu được viết bằng Bash vì nó chủ yếu là dàn nhạc. Nó sử dụng duplicitycho các công cụ sao lưu thực tế. Hiện tại bạn có thể sao lưu vào FTP (S) và Amazon S3.

Cấu hình khá đơn giản: viết một tệp cấu hình trong YAML mô tả những gì cần sao lưu và ở đâu, và ở đây bạn đi!

Đối với các thùng chứa dữ liệu, nó sẽ tự động gắn các ổ đĩa được chia sẻ bởi thùng chứa của bạn để sao lưu và xử lý nó. Đối với các thùng chứa mysql, nó liên kết chúng và thực hiện một mysqldump đi kèm với thùng chứa của bạn và xử lý kết quả.

Tôi đã viết nó bởi vì tôi sử dụng Docker-Cloud không cập nhật với các bản phát hành động cơ docker gần đây và vì tôi muốn nắm lấy cách Docker bằng cách không bao gồm bất kỳ quá trình sao lưu nào trong các thùng chứa ứng dụng của tôi.


1

Nếu bạn thích nhập các toán tử phức tạp từ dòng lệnh, bạn sẽ thích các kỹ thuật sao lưu vùng chứa thủ công này. Hãy nhớ rằng, có một cách nhanh hơn và hiệu quả hơn để sao lưu các container cũng hiệu quả không kém. Tôi đã viết hướng dẫn tại đây: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Bước 1: Thêm máy chủ Docker vào bất kỳ đám mây nào Như được giải thích trong hướng dẫn trên trang web hỗ trợ Morpheus, bạn có thể thêm máy chủ Docker vào đám mây bạn chọn trong vài giây. Bắt đầu bằng cách chọn Cơ sở hạ tầng trên thanh điều hướng Morpheus chính. Chọn Máy chủ lưu trữ ở trên cùng của cửa sổ Cơ sở hạ tầng và nhấp vào nút Rác + Máy chủ lưu trữ trên máy tính ở trên cùng bên phải.

Để sao lưu máy chủ Docker lên đám mây thông qua Morpheus, hãy điều hướng đến màn hình Cơ sở hạ tầng và mở menu Chiên + Container Hosts.

Chọn loại máy chủ chứa trên menu, chọn một nhóm, sau đó nhập dữ liệu vào năm trường: Tên, Mô tả, Hiển thị, Chọn Đám mây và Nhập Thẻ (tùy chọn). Bấm vào Tiếp theo, rồi định cấu hình các tùy chọn máy chủ bằng cách chọn gói dịch vụ. Lưu ý rằng các trường Số lượng, Bộ nhớ và CPU sẽ chỉ hiển thị nếu gói bạn chọn có bật tùy chọn tùy chỉnh.

Đây là nơi bạn thêm và kích thước khối lượng, đặt kích thước bộ nhớ và số lượng CPU và chọn một mạng. Bạn cũng có thể định cấu hình tên người dùng và mật khẩu, tên miền và tên máy chủ, theo mặc định là tên container bạn đã nhập trước đó. Bấm Tiếp theo, rồi thêm bất kỳ Quy trình tự động hóa nào (tùy chọn). Cuối cùng, xem lại cài đặt của bạn và bấm Hoàn tất để lưu chúng.

Bước 2: Thêm tích hợp Docker Registry vào đám mây công cộng hoặc riêng tư Adam Hicks mô tả trong một hướng dẫn khác của Morpheus về cách đơn giản để tích hợp với một Docker Registry riêng. (Không cần cấu hình bổ sung để sử dụng Morpheus để cung cấp hình ảnh với trung tâm công cộng của Docker bằng API Docker công khai.)

Chọn Tích hợp trong tab Quản trị của thanh điều hướng chính, sau đó chọn nút Tích hợp + Mới ở phía bên phải màn hình. Trong cửa sổ Tích hợp xuất hiện, chọn Kho lưu trữ Docker trong menu thả xuống Loại, nhập tên và thêm điểm cuối API đăng ký riêng. Cung cấp tên người dùng và mật khẩu cho sổ đăng ký bạn đang sử dụng và nhấp vào nút Lưu Thay đổi.

Tích hợp Docker Registry với một đám mây riêng thông qua hộp thoại Tích hợp mới Morpheus.

Để cung cấp tích hợp mà bạn vừa tạo, hãy chọn Docker trong Type trong hộp thoại Tạo Instance, chọn registry trong menu thả xuống Docker Registry trong tab Configure, sau đó tiếp tục cung cấp như bất kỳ container Docker nào.

Bước 3: Quản lý sao lưu Sau khi bạn đã thêm máy chủ Docker và tích hợp sổ đăng ký, bản sao lưu sẽ được cấu hình và thực hiện tự động cho từng phiên bản bạn cung cấp. Hỗ trợ Morpheus cung cấp hướng dẫn để xem các bản sao lưu, tạo bản sao lưu cá thể và tạo bản sao lưu máy chủ.


1

Nếu bạn muốn sao lưu hoàn chỉnh, bạn sẽ cần thực hiện một vài bước:

  1. Cam kết container với một hình ảnh
  2. Lưu hình ảnh
  3. Sao lưu âm lượng của bộ chứa bằng cách tạo một tệp tar của điểm gắn của âm lượng trong thùng chứa.
  4. Lặp lại các bước 1-3 cho bộ chứa cơ sở dữ liệu.

Lưu ý rằng chỉ thực hiện một cam kết Docker của container đối với một hình ảnh KHÔNG bao gồm các khối lượng được đính kèm vào container (ref: Tài liệu cam kết Docker ).

" Hoạt động cam kết sẽ không bao gồm bất kỳ dữ liệu nào chứa trong các khối được gắn bên trong container. "


0

Nếu bạn có một trường hợp đơn giản như của tôi, bạn có thể làm như sau:

  1. Tạo một Dockerfile mở rộng hình ảnh cơ sở của container của bạn
  2. Tôi giả sử rằng khối lượng của bạn được ánh xạ vào hệ thống tệp của bạn, vì vậy bạn chỉ cần thêm các tệp / thư mục đó vào hình ảnh của mình bằng cách sử dụng ADD folder destination
  3. Làm xong!

Ví dụ: giả sử bạn có dữ liệu từ các ổ đĩa trong thư mục chính của mình, ví dụ tại /home/mydatabạn có thể chạy như sau:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Trường hợp DOCKERFILE của bạn trỏ đến một tệp như thế này:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

Phần còn lại của công cụ được kế thừa từ hình ảnh cơ sở. Bây giờ bạn có thể đẩy hình ảnh đó lên docker đám mây và người dùng của bạn sẽ có dữ liệu có sẵn trực tiếp trên các thùng chứa của họ


điểm quan trọng trong việc sử dụng âm lượng nếu cuối cùng bạn sẽ nướng nó vào hình ảnh.
jiggunjer

@jiggunjer có âm lượng cho phép bạn ghi đè dữ liệu trong vùng chứa
Danielo515

Tôi có thể ghi đè dữ liệu mà không cần âm lượng quá, sử dụng docker cp.
jiggunjer

0

Vấn đề : Bạn muốn sao lưu bộ chứa hình ảnh của mình VỚI khối lượng dữ liệu trong đó nhưng tùy chọn này không nằm ngoài hộp, Cách thẳng và tầm thường sẽ là sao chép đường dẫn âm lượng và sao lưu hình ảnh docker 'tải lại và liên kết nó cả hai cùng nhau. nhưng giải pháp này có vẻ vụng về và không bền vững và có thể duy trì - Bạn sẽ cần tạo ra một công việc định kỳ để thực hiện công việc này mỗi lần.

Giải pháp : Sử dụng dockup - Hình ảnh Docker để sao lưu khối lượng bộ chứa Docker của bạn và tải nó lên s3 (Docker + Backup = dockup). dockup sẽ sử dụng thông tin xác thực AWS của bạn để tạo một nhóm mới có tên theo biến môi trường, lấy các khối được định cấu hình và sẽ được tarball, gzip, đóng dấu thời gian và tải lên thùng S3.

Các bước :

  1. cấu hình docker-compose.ymlvà đính kèm env.txttập tin cấu hình vào nó, Dữ liệu cần được tải lên một thùng s3 được bảo mật chuyên dụng và sẵn sàng để tải lại khi thực thi DRP. để xác minh đường dẫn khối lượng nào để định cấu hình chạy docker inspect <service-name>và định vị các ổ đĩa :

"Tập": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Chỉnh sửa nội dung của tệp cấu hình env.txtvà đặt nó trên đường dẫn dự án:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Chạy container dockup

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Sau đó, xác minh thùng s3 của bạn chứa dữ liệu liên quan

-1

Đây là một cách sao lưu thư mục âm lượng.
Nếu bạn có đăng ký docker, phương pháp này rất hữu ích.
Điều này sử dụng đăng ký docker để di chuyển tệp zip dễ dàng.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

Trong một máy chủ khác

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Chạy hình ảnh của bạn sử dụng thư mục âm lượng này.
Bạn có thể tạo một hình ảnh có cả một tệp zip hình ảnh và một tập nén một cách dễ dàng.
Nhưng tôi không khuyến nghị vì nhiều lý do (kích thước hình ảnh, lệnh nhập, ..).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.