Docker konteynerini veri hacimleriyle nasıl yedekleyebilirim?


153

Bu Docker-image tutum / wordpress'i bir Wordpress web sitesini göstermek için kullanıyorum. Son zamanlarda görüntünün MySQL verileri için birimler kullandığını öğrendim.

Yani sorun şudur: Kapsayıcıyı yedeklemek ve geri yüklemek istersem, bir görüntü işlemeyi deneyebilir ve daha sonra kapsayıcıyı silebilir ve işlenen görüntüden yeni bir kapsayıcı oluşturabilirim. Ama bunu yaparsam birim silinir ve tüm verilerim kaybolur.

Kapsayıcımı ve hacim verilerini yedeklemenin basit bir yolu olmalı, ancak hiçbir yerde bulamıyorum.


Adlandırılmış ve adlandırılmamış birimler, resimler, yapılandırma, günlükler, kapsayıcı kök dosya sistemi, veritabanları ve daha fazlasını içeren bir docker projesinde her şeyi yedekleyen bu komut dosyasına göz atın: docker-compose-backup.sh .
Nick Sweeting

Yanıtlar:


142

kapsayıcıyı geri döndürmek istersem, bir görüntü işlemeyi deneyebilir ve daha sonra kapsayıcıyı silebilir ve işlenen görüntüden yeni bir kapsayıcı oluşturabilirim. Ama bunu yaparsam birim silinir ve tüm verilerim kaybolur

Docker kullanıcı kılavuzunun açıkladığı gibi, veri hacimleri , verileri bir konteyner dosya sisteminin dışında tutmaya yöneliktir. Bu aynı zamanda birden fazla kap arasında veri paylaşımını da kolaylaştırır.

Docker hiçbir zaman birimlerdeki verileri silmezken (ilişkili kapsayıcıyı ile silmediğiniz sürece docker rm -v), herhangi bir docker kapsayıcısı tarafından başvurulan olmayan birimlere sarkan birimler denir . Bu sarkan hacimlerden kurtulmak ve erişmek zordur.

Bu, bir birimi kullanan son kapsayıcı silinir silinmez, veri hacminin sarkması ve içeriğinin erişilmesi zor olduğu anlamına gelir.

Bu sarkan hacimleri önlemek için, püf noktası, kalmak istediğiniz veri hacmini kullanarak ek bir liman işçisi konteyneri oluşturmaktır; böylece her zaman en az bir docker konteyneri hacmini referans alır. Bu şekilde, wordpress uygulamasını çalıştıran docker kapsayıcısını, bu veri hacmi içeriğine erişim kolaylığını kaybetmeden silebilirsiniz.

Bu tür kaplara veri hacmi kapları denir .

Kapsayıcı ve hacim verilerimi yedeklemenin basit bir yolu olmalı, ancak hiçbir yerde bulamıyorum.

yedek docker görüntüleri

Docker görüntülerini yedeklemek için, daha sonra docker load komutuyla yeni bir docker görüntüsü oluşturmak için kullanılabilecek bir tar arşivi oluşturacak docker save komutunu kullanın.

yedek docker konteynerler

Docker kapsayıcısını farklı yollarla yedekleyebilirsiniz

  • docker commit komutunu kullanarak docker kapsayıcısının geçerli durumunu temel alan yeni bir docker görüntüsü uygulayarak
  • kullanarak tar arşivi olarak liman işçisi konteyner dosya sistemini ihraç ederek liman işçisi ihracat komutunu. Daha sonra docker import komutuyla bu tar arşivinden yeni bir docker görüntüsü oluşturabilirsiniz .

Bu komutların yalnızca docker konteyneri katmanlı dosya sistemini yedekleyeceğini unutmayın. Bu, veri hacimlerini hariç tutar .

docker veri birimlerini yedekle

Bir veri birimini yedeklemek için, docker kullanım kılavuzunda açıklandığı gibi birim içeriğinin bir arşivini oluşturmak üzere yedeklemek istediğiniz birimi kullanarak yeni bir kapsayıcı çalıştırabilir ve tar komutunu yürütebilirsiniz .

Sizin durumunuzda, veri hacmi bir MySQL sunucusunun verilerini saklamak için kullanılır. Dolayısıyla, bu birim için bir tar arşivini dışa aktarmak istiyorsanız, önce MySQL sunucusunu durdurmanız gerekir. Bunu yapmak için wordpress kabını durdurmanız gerekecek.

MySQL verilerini yedekle

Diğer bir yol, mysqldump komutuyla veritabanı dökümü oluşturmak için MySQL sunucusuna uzaktan bağlanmaktır . Ancak bunun çalışması için MySQL sunucunuzun uzak bağlantıları kabul edecek şekilde yapılandırılmış olması ve uzaktan bağlanmasına izin verilen bir kullanıcısı olması gerekir. Bu, kullandığınız wordpress docker görüntüsünde geçerli olmayabilir.


Düzenle

Docker kısa süre önce , satıcıların uyguladığı eklentilere hacimlerin işlenmesine izin veren Docker birim eklentilerini tanıttı .

docker runKomut için yeni bir davranışı vardır -vseçeneği. Artık bir birim adı geçirmek mümkündür . Bu şekilde oluşturulan birimler adlandırılır ve daha sonra referans vermesi kolaydır, bu da sarkan hacimlerle ilgili sorunları kolaylaştırır .

Düzenle 2

Docker docker volume prunetüm sarkan hacimleri kolayca silme komutunu verdi.


34
Aslında daha kolay hareket edebileceğim bir konteynır yapmakla daha çok ilgileniyorum, bir konteynerin taşınamayan noktasını anlamıyorum.
pguardiario

Bu durumda Flocker
Thomasleveil

9
Docker, veri birimlerini otomatik olarak silmiyor. 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. yalnızca veri kapları eski
Andrii Zarubin

2
için uzak bir bağlantıya ihtiyacınız yoktur mysqldump. Sadece kabın içine koyun, dökün ve sonra ile kopyalayın docker cp.
jiggunjer

@AndriiZarubin re: data only container obsolete?Hiç de değil. Yalnızca veri kapsayıcısı size docker exec data-container tar -czf snapshot.tgz /datao zaman docker cp data-container:snapshot.tgz ./snapshot.tgzve benzerlerine bir kap verir . Konteynerin uzun ömürlü olmasını istiyorsanız, komutunu tail -f /dev/nullminimum kaynak kullanarak asla çıkmadığı bir şey yapın .
Jesse Chisholm

32

GÜNCELLEME 2

Ham tek birim yedek bash betiği:

#!/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

Ham tek birim geri yükleme bash betiği:

#!/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

Kullanım böyle olabilir:

$ 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

Varsayımlar şunlardır: yedekleme dosyası backup.tar olarak adlandırılır, yedekleme ve geri yükleme komut dosyası ile aynı dizinde bulunur, birim adı kaplar arasında aynıdır.

GÜNCELLEME

Bana öyle geliyor ki, konteynerlerden destek hacimleri, veri konteynerlerinden destek hacimlerinden farklı değil.

Birimler, bir kaba bağlı yollardan başka bir şey değildir, bu nedenle işlem aynıdır.

Docker-backup aynı kapsayıcı birimleri için de çalışıp çalışmadığını bilmiyorum ama kullanabilirsiniz:

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

ve:

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

SON GÜNCELLEME

Liman işçisi birimlerinin kaplarını yedeklemenizi ve geri yüklemenizi sağlayan bu güzel araç var:

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

bunun gibi bazı konteyner hacimlerine bağlı bir kabınız varsa:

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

bunun gibi tüm birimleri yedekleyebilirsiniz:

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

ve şu şekilde geri yükleyin:

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

Veya resmi yolu takip edebilirsiniz:

Yalnızca veri birimlerini bir ana bilgisayardan diğerine nasıl taşıyabilirim?


Hayır, bu bir "--volumes-from" durumu değil, bunun yerine dockerfile'da birimler tanımlanır, bu da verinin kalıcı olmamasına neden olur. Eğer tutum / lamba için dockerfile bakarsanız ne demek istediğimi göreceksiniz.
pguardiario

Hacimleri hacimleri ve konteynerler olan bir hacimleri açısından bir veri konteyner olarak bir kap kullanırsanız fark yoktur çünkü zaten verdiği cevap hacminin her türlü için iyidir
tommasop

Dockerfile dosyasında tanımlanan birim, kap yok edildiğinde yok edilir. Dolayısıyla, kapsayıcıyı taşıdığınızda bu verileri geri almanın bir yolu yoktur.
pguardiario

kabı taşımadan önce verileri
çıkarmanız

1
Bir hata alıyorum: unknown shorthand flag: 'r' in -rm.Olmalı mı --rm? (Docker sürüm 18.09.5, yapı e8ff056)
kuga

22

Yalnızca bağlı birimleri yedeklemeniz gerekiyorsa, klasörleri Dockerhost'unuzdan kopyalayabilirsiniz .

Not: Ubuntu'daysanız , Dockerhost yerel makinenizdir. Eğer biri Mac , Dockerhost sanal makinedir.

Ubuntu hakkında

Birimleri olan tüm klasörleri burada bulabilirsiniz: /var/lib/docker/volumes/böylece onları kopyalayabilir ve istediğiniz yerde arşivleyebilirsiniz.

MAC'de

Ubuntu'da olduğu kadar kolay değil. VM'den dosya kopyalamanız gerekir.

Birimlerin tüm klasörlerini sanal makineden (Docker sunucusunun çalıştığı yerde) yerel makinenize nasıl kopyalayacağınıza dair bir komut dosyasıdır. Liman işçisi makine VM'nizin varsayılan olarak adlandırıldığını varsayıyoruz .

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

Geçerli dizinde bir ./backup_volumes klasörü oluşturacak ve tüm birimleri bu klasöre kopyalayacaktır.

Kayıtlı tüm birimleri yerel dizininizden ( ./backup_volumes ) Dockerhost makinesine nasıl kopyalayacağınıza dair bir komut dosyası

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

Şimdi çalışıp çalışmadığını kontrol edebilirsiniz:

docker volume ls

/var/lib/docker/volumesUbuntu altında bu klasörün yedeğini almak için kapsayıcıyı kapatmamız gerekiyor mu?
onknows

2
Gerek yok, istediğiniz zaman bu klasörü kopyalayabilirsiniz.
Andrii Dvoiak

4
Teknik olarak evet, yapabilirsiniz, ancak kopya atomik olmadığından ve birime eşzamanlı yazımlar olabileceğinden veri bozulması sorunlarına maruz kalırsınız, önce kapsayıcıyı durdurmayı tercih ederim.
Alessandro S.

13

Diyelim ki cilt adınız data_volume. Birimi bir docker görüntüsüne yedeklemek ve bu birimden geri yüklemek için aşağıdaki komutları kullanabilirsiniz data_image:

Yedeklemek için:

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

Yenilemek:

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

Bu gerçek zamanlı bir destek mi?
Kang Andrew

2
Aynı birim birden çok bağlantı istasyonuna monte edilebildiğinden, evet bu gerçek zamanlı yedeklemedir. Örneğin. Mysql kabına monte edilen birim yedeklenebilir (veri bozulması olmadığı varsayılarak). Ancak veri bozulması korkusu nedeniyle durdurulması gereken hizmetler için, bu gerçek zamanlı değildir.
Sahil Ahuja

9

Bu eski olduğunu biliyorum, ama docker hub bir veri kapsayıcı (yedekleme olarak) itmek için iyi belgelenmiş bir çözüm olmadığını fark. Https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub adresinde bunu nasıl yapacağınıza dair kısa bir örnek yayınladım.

Alt satır aşağıdadır

Docker öğreticisi, veri birimini yerel olarak yedekleyip geri yükleyebilmenizi önerir. Bu tekniği kullanacağız, bu yedeklemenin gelecekte istediğimiz herhangi bir yere kolay geri yükleme için docker hub'ına itilmesi için birkaç satır daha ekleyeceğiz. Hadi başlayalım. İzlenecek adımlar şunlardır:

Veri hacmini veri kabından yedeklemeye adlı veri kapsayıcısından yedekleyin

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

Görüntünün bir parçası olarak işleyebilmemiz için bu tar dosyasını yeni bir kapsayıcıya genişletin

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

Görüntüyü istediğiniz bir etiketle tamamlayın ve itin ($ VERSION)

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

Sonunda temizleyelim

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

Şimdi depomuzda sadece yedekleme dosyalarına ve klasörlerine sahip bir dosya sistemi olan data-backup adlı bir resmimiz var. Bu resmi kullanmak için (yedeklemeden geri yükleme olarak da bilinir) aşağıdakileri yaparız:

Veri kapsayıcısını veri yedekleme görüntüsü ile çalıştırın

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

WhatEver görüntünüzü veri konatoründen gelen hacimlerle çalıştırın

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

Bu kadar.

Etrafında bu iş için hiçbir belge olduğunu şaşırdım. Umarım birisi bunu faydalı bulur. Bunu düşünmem biraz zaman aldı.


8

Projenizde docker-compose kullanılıyorsa, birimlerinizi yedeklemek ve geri yüklemek için bir yaklaşım buradadır.

liman işçisi-compose.yml

Temel olarak docker-compose.yml dosyanıza hizmetler ekler db-backupve db-restorebiriminizin adı için uyarlarsınız. Birimim dbdatabu örnekte adlandırılmıştır .

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"

Yolsuzluktan kaçının

Veri tutarlılığı için, yedeklemeden veya geri yüklemeden önce db kabınızı durdurun

docker-compose stop db

Yedekleme

Varsayılan hedefe ( backup/dbdata.tar.bz2) yedeklemek için :

docker-compose run --rm db-backup

Veya alternatif bir hedef adı belirtmek istiyorsanız şunları yapın:

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

geri Yükleme

Geri yüklemek backup/dbdata.tar.bz2için şunları yapın:

docker-compose run --rm db-restore

Veya aşağıdakileri kullanarak belirli bir dosyadan geri yükleyin:

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

Bu yaklaşımı oluşturmak için https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ adresinden komutları uyarladım .


5

Aşağıdaki komut, tar adlı tüm adlandırılmış veri birimlerinin yüklendiği bir kapta tar çalıştıracak ve çıktıyı bir dosyaya yönlendirecektir:

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

Bir şeyler ters gittiğinde ortaya çıkan arşivi test ettiğinizden emin olun:

tar -tjf data-volumes.tar.bz2

4

Bir arşive basit bir yedeklemeye ihtiyacınız varsa, küçük yardımcı programımı deneyebilirsiniz: https://github.com/loomchild/volume-backup

Misal

Destek olmak:

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

Sesi arşivler adlı some_volumeetmek /tmp/archive1.tar.bz2arşiv dosyasının

Onarmak:

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

olacaktır silin ve adlandırılmış hacmi geri some_volumegelen /tmp/archive1.tar.bz2arşiv dosyasının.

Daha fazla bilgi: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


Benzer bir araç oluşturdum github.com/01e9/docker-backup Yedek arşivler oluşturur ve bunları bir Resilio senkronizasyon dizinine ekler
Oleg

2

Sadece docker-backup olarak adlandırılan veri ve mysql kapsayıcılarını düzenlemek ve başlatmak için bir araç oluşturdum . Bağlantı istasyonu hub'ında kullanıma hazır bir görüntü bile vardır .

Esas olarak Bash'te yazılmıştır, çünkü çoğunlukla düzenleme şeklindedir. duplicityGerçek yedekleme motoru için kullanır . Şu anda FTP (S) ve Amazon S3'e yedekleyebilirsiniz.

Yapılandırma oldukça basit: YAML'de neyi ve nerede yedekleyeceğinizi açıklayan bir yapılandırma dosyası yazın ve işte buradasınız!

Veri kapları için, kapsayıcı tarafından paylaşılan birimleri yedeklemek ve işlemek için otomatik olarak bağlar. MySQL konteynırları için, bunları birbirine bağlar ve konteynerinizle birlikte verilen bir MySQLdump yürütür ve sonucu işler.

En son docker motoru sürümleriyle güncel olmayan Docker-Cloud kullandığım ve uygulama kaplarıma herhangi bir yedekleme işlemi dahil etmeyerek Docker'ı kucaklamak istediğim için yazdım.


2

Tam bir yedekleme istiyorsanız, birkaç adım gerçekleştirmeniz gerekir:

  1. Kapsayıcıyı bir resme koy
  2. Resmi kaydet
  3. Kaptaki birimin bağlama noktasının katran dosyasını oluşturarak kabın birimini yedekleyin.
  4. Veritabanı kapsayıcısı için de 1-3 arasındaki adımları yineleyin.

Bir görüntüye yalnızca bir Docker işlemi yapmanın kaba eklenmiş birimleri içermediğini unutmayın (ref: Docker işleme belgeleri ).

" Taahhüt işlemi, kabın içine monte edilmiş birimlerde bulunan hiçbir veri içermeyecektir. "


1

Komut satırından gizli operatörler girmeyi seviyorsanız, bu manuel konteyner yedekleme tekniklerini seveceksiniz. Unutmayın, kapları yedeklemenin daha etkili ve hızlı bir yolu vardır. Burada talimatlar yazdım: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Adım 1: Herhangi Bir Buluta Bir Docker Ana Bilgisayarı Ekleme Morpheus destek sitesindeki bir öğreticide açıklandığı gibi, saniyeler içinde istediğiniz buluta bir Docker ana bilgisayarı ekleyebilirsiniz. Ana Morpheus gezinti çubuğundaki Altyapı'yı seçerek başlayın. Altyapı penceresinin üst kısmındaki Ana Makineler'i seçin ve sağ üstteki "+ Kapsayıcı Ana Bilgisayarları" düğmesini tıklayın.

Bir Docker ana bilgisayarını Morpheus aracılığıyla bir buluta yedeklemek için Altyapı ekranına gidin ve “+ Konteyner Ana Bilgisayarları” menüsünü açın.

Menüden bir kapsayıcı ana bilgisayar türü seçin, bir grup seçin ve ardından beş alana veri girin: Ad, Açıklama, Görünürlük, Bir Bulut Seçin ve Etiketleri Girin (isteğe bağlı). İleri'yi tıklatın ve ardından bir hizmet planı seçerek ana bilgisayar seçeneklerini yapılandırın. Birim, Bellek ve CPU sayısı alanlarının yalnızca seçtiğiniz planda özel seçenekler etkinleştirilmişse görünür olacağını unutmayın.

Burada birimler eklediğiniz ve boyutlandırdığınız, bellek boyutunu ve CPU sayısını ayarladığınız ve bir ağ seçtiğiniz yerdir. Ayrıca, OS kullanıcı adını ve parolasını, etki alanı adını ve varsayılan olarak daha önce girdiğiniz kapsayıcı adı olan ana bilgisayar adını da yapılandırabilirsiniz. İleri'yi tıklatın ve ardından herhangi bir Otomasyon İş Akışı ekleyin (isteğe bağlı) Son olarak, ayarlarınızı gözden geçirin ve kaydetmek için Tamamla'yı tıklatın.

Adım 2: Ortak veya Özel Bulutlara Docker Kayıt Entegrasyonu Ekleyin Adam Hicks başka bir Morpheus eğitiminde özel Docker Kayıt Defteri ile entegre olmanın ne kadar basit olduğunu açıklar. (Genel Docker API'sını kullanarak Docker'ın genel hub'ına görüntü sağlamak için Morpheus'u kullanmak için ek yapılandırma gerekmez.)

Ana gezinme çubuğunun Yönetici sekmesinin altındaki Entegrasyonlar'ı seçin ve ardından ekranın sağ tarafındaki “+ Yeni Entegrasyon” düğmesini seçin. Görüntülenen Entegrasyon penceresinde, Tür açılır menüsünden Docker Deposu'nu seçin, bir ad girin ve özel kayıt defteri API'sı uç noktasını ekleyin. Kullandığınız kayıt defteri için bir kullanıcı adı ve parola girin ve Değişiklikleri Kaydet düğmesini tıklayın.

Morpheus “Yeni Entegrasyon” iletişim kutusu aracılığıyla bir Docker Kayıt Defterini özel bir bulutla entegre edin.

Yeni oluşturduğunuz entegrasyonu sağlamak için, Örnek Oluştur iletişim kutusundaki Tür altında Docker'ı seçin, Yapılandır sekmesinin altındaki Docker Kayıt Defteri açılır menüsünde kayıt defterini seçin ve ardından herhangi bir Docker kapsayıcısında yaptığınız gibi hazırlığa devam edin.

Adım 3: Yedeklemeleri Yönetme Docker ana bilgisayarını ekleyip kayıt defterini entegre ettikten sonra, yedeklediğiniz her örnek için otomatik olarak bir yapılandırma yapılandırılır ve gerçekleştirilir. Morpheus desteği, yedeklemeleri görüntüleme, örnek yedekleme oluşturma ve sunucu yedeklemesi oluşturma talimatları sağlar.


0

Benimki kadar basit bir davanız varsa aşağıdakileri yapabilirsiniz:

  1. Kapsayıcınızın temel görüntüsünü genişleten bir Dockerfile oluşturun
  2. Birimlerinizin dosya sisteminize eşlendiğini varsayıyorum, böylece bu dosyaları / klasörleri kullanarak resminize ekleyebilirsiniz. ADD folder destination
  3. Bitti!

Örneğin, ana dizininizdeki birimlerden veri aldığınızı varsayarsak, örneğin /home/mydata, aşağıdakileri çalıştırabilirsiniz:

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

DOCKERFILE dosyanız aşağıdaki gibi bir dosyayı gösterir:

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

WORKDIR /opt/data
ADD mydata .

Geri kalan şeyler temel görüntüden miras alınır. Artık bu resmi docker bulutuna aktarabilirsiniz ve kullanıcılarınız verileri doğrudan kaplarında bulunduracak


eninde sonunda görüntüye pişirecekseniz, bir birimi kullanmanın anlamı nedir.
jiggunjer

@jiggunjer bir hacime sahip kapsayıcısındaki verileri geçersiz
kılmanızı sağlar

Kullanarak bir birim olmadan verileri geçersiz kılabilirim docker cp.
jiggunjer

0

Sorun : Veri kapsayıcısını içindeki veri hacimleriyle yedeklemek istiyorsunuz, ancak bu seçenek kutunun dışında değil, Düz ileri ve önemsiz yol, birim yolunu kopyalayıp docker görüntüsünün yedeklenmesini ve bağlanmasını sağlar. ikisi birlikte. ancak bu çözüm beceriksiz ve sürdürülebilir ve sürdürülebilir değil gibi görünüyor - Bu akışı her seferinde yapacak bir cron işi yaratmanız gerekecek.

Çözüm : Dockup - Docker kapsayıcı birimlerinizi yedeklemek ve s3'e yüklemek için Docker görüntüsünü kullanma (Docker + Backup = dockup). dockup, AWS kimlik bilgilerinizi ortam değişkenine göre yeni bir kova oluşturmak için kullanır, yapılandırılmış birimleri alır ve tarballed, gzip ile sıkıştırılır, zaman damgalı ve S3 kovasına yüklenir.

Adımlar :

  1. Yapılandırma dosyasını yapılandırın ve ona docker-compose.ymlekleyin, env.txtVeriler özel bir güvenli s3 kovasına yüklenmeli ve DRP yürütmelerine yeniden yüklenmeye hazır olmalıdır. yapılandırmak vadede hangi hacimleri yolunu doğrulamak için docker inspect <service-name>ve yerini hacimleri :

"Birimler": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Yapılandırma dosyasının içeriğini düzenleyin env.txtve proje yoluna yerleştirin:

    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. Yükleme kabını çalıştırın

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Daha sonra s3 grubunuzun ilgili verileri içerdiğini doğrulayın

-1

Bu bir birim-klasör yedekleme yoludur.
Eğer docker kayıt defteri infra varsa, Bu yöntem çok yararlıdır.
Bu, zip dosyasını kolayca taşımak için docker kayıt defterini kullanır.

#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

Başka bir sunucuda

#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"

Bu birim klasörünü kullanan resminizi çalıştırın.
Hem bir çalışma görüntüsü hem de bir birim zip dosyası olan bir görüntüyü kolayca yapabilirsiniz.
Ama çeşitli nedenlerle (görüntü boyutu, giriş komutu, ..) tavsiye etmiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.