Docker birim yedekleme ve geri yükleme


23

Bazı hizmetleri bir CentOS 6.4 sunucusunda dağıtmak için Docker kullanıyorum ve ürettikleri verilerin nasıl düzgün bir şekilde yedekleneceğini bulmaya çalışıyorum.

Örneğin, hizmetlerden biri, kullanıcıların dosya yükleyebileceği bir web uygulamasıdır. Bu konteyner /filesiçin yedeklemek istediğim bir birim var . Ana bilgisayar bağları, kaşlarını çatmış gibi görünüyor, çünkü bu tür bir bağlantı hiçbir şekilde taşınabilir değil - bu blog yazısında ve birim docker belgelerinde belirtildiği gibi .

Aynı blog gönderisinden, bir birimdeki dosyalara erişmek için bir ana bilgisayar bağına gerek duymadığımı , dosyaların docker inspectnerede olduğunu bulmak için kullanabileceğimi biliyorum .

Ama işte benim sorunum: Sadece kapları ve bunlarla ilişkili hacimleri inşa etmek için gerekli olan liman işçisi dosyalarını yedeklemeyi düşünüyordum. Her şeyi yedekten geri yüklemek zorunda kalmam durumunda, hangi birim dizininin hangi kaba karşılık geldiğini nasıl bilebilirim? Kabın yeniden oluşturulması, kimliğin ve birim yolunun değişmesine neden olur; bu nedenle, onları eşleştirmek için bazı ek bilgilere ihtiyacım olacak. Başka bir şey varsa, gerçekte her şeyi geri yükleyebilmek için ne yedeklemeliyim?

Yanıtlar:


24

Haklısın. Tek başına hacimleri olan birden fazla konteyneriniz olabileceğinden, hangi hacmin hangi kaba karşılık geldiğini takip etmeniz gerekir. Bunun nasıl yapılacağı kurulumunuza bağlıdır: Veri kabı için -data adını kullanıyorum, bu nedenle görüntünün hangi kaba ait olduğu açık. Bu şekilde böyle yedeklenebilir:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

Şimdi resminizi yeniden oluşturmanız ve veri kabınızı yeniden oluşturmanız yeterlidir:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

Yani bu, yedeklemeniz gereken anlamına gelir:

  • Dockerfile
  • hacim
  • kaptaki ses yolu
  • Birimin ait olduğu konteynerin adı

Güncelleme: Bu arada, kapları ve bunların birimlerini (kapsayıcılarını) yedeklemek için bir araç hazırladım: https://github.com/discordianfish/docker-backup ve yedekleri oluşturabilecek ve bunları zorlayabilecek bir yedekleme görüntüsü s3: https://github.com/discordianfish/docker-lloyd


Bu adil bir uzlaşma, teşekkürler. Veriler için ayrı bir kap kullanmanın açık bir avantajı var mı?
fcoelho

Bu yine kurulumunuza bağlı. Bir veri kabını kullanmak mantıklıdır çünkü 'from volümlerini' kullanarak kolayca başvurabilirsiniz ve tüm iç kısımları soyutlayabilirsiniz: Yolları ve montaj noktalarını düşünmek yerine sadece konteynerden diğer konteynerlere birimler bağlayabilirsiniz.
Johannes 'fish' Ziemke,

Bu hatayı geçersiz seçeneğim var - z. Meşgul kutusundaki varsayılan katran bu desteklemiyor gibi görünüyor.
Dzung Nguyen

6
jq çok serin değil, değil kullanımı neden bağımlılık, tanıtan daha edilmektedir docker inspectşöyle templating inşa s: VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" ). Muhtemelen, aktif bir şekilde kullanımdayken (örn. Veritabanları), dosyaları bu şekilde yedeklemelerini beklememelerini hatırlatmak da akıllıca olacaktır.
mc0e

2
Docker 1.8'de biçim değişti - Volumesgitti ve Mountsbunun yerine farklı bir yapıya sahipler . rangeİlgilendiğimiz bağlantı noktasını bulmak için biraz daha çalışmamız gerekiyorVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
Jarek Przygódzki

5

Daha yeni Docker'da (test edilmiştir 1.9.1, build 9894698) cpkomutu kullanabilirsiniz .

Bir dizini kaptan ana bilgisayara nasıl kopyalayacağınıza bir örnek:

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

Bir dizini kaptan tardosyaya nasıl kopyalayacağınıza bir örnek :

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

Son fakat en az değil, bir dizinin kaptan bir tar.gzdosyaya nasıl kopyalanacağı örneği :

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz

2
docker cpher şeyi ağ üzerinden gönderir. Özellikle Docker biriminiz zaten bir btrfs birimi ise, kaçınmak istediğiniz bir şey.
Jarek Przygódzki

2
Soru yedekleme ve geri yükleme bahseder . Bu cevap kullanarak geri yükleme örneği docker cpiyi olurdu.
MadMike
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.