Docker'da kaydet ve dışa aktar arasındaki fark nedir?


Yanıtlar:


169

Kısa cevap:

  • savebir görüntü getirecek: bir VM veya fiziksel sunucu için bu yükleme .ISO görüntüsü veya diski olacaktır. Temel işletim sistemi.

    Görüntüyü oluşturmak için gereken tüm zincirin katmanlarını ve meta verilerini paketleyecektir. Daha sonra bu "kaydedilmiş" görüntü zincirini başka bir docker örneğine yükleyebilir ve bu görüntülerden kapsayıcılar oluşturabilirsiniz.

  • exporttüm kapsayıcıyı getirecek: normal bir VM'nin anlık görüntüsü gibi. İşletim sistemini kaydeder, aynı zamanda kap ömrü boyunca yazdığınız herhangi bir veri dosyasını da kaydeder. Bu daha çok geleneksel bir yedek gibidir.

    Size konteynerinizin dosya sistemini içeren düz bir .tar arşivi verecektir.

Düzenleme: Açıklamam hala karışıklığa yol açabileceğinden, bu komutlardan birinin kaplarla çalıştığını, diğerinin görüntülerle çalıştığını anlamak önemli olduğunu düşünüyorum.

  • Bir görüntünün 'ölü' veya değişmez olarak kabul edilmesi gerekir, 0 veya 1000 kaptan başlamak tek bir bayt değiştirmez. Bu yüzden daha önce bir sistem kurulum ISO'su ile bir karşılaştırma yaptım. Belki de canlı bir CD'ye daha yakın.

  • Bir kap görüntüyü "önyükler" ve üstüne ek bir katman ekler. Bu katman, kapsayıcıdaki değişiklikleri (oluşturulan / değiştirilen / kaldırılan dosyalar ...) depolar.


2
Sadece açıklamam için: Varsayalım ki bazı değişiklikler yaptığım bir çalışma kabım var (örn. Yeni bir klasör oluşturdum). Şimdi bu konteynerin (ile docker commit) bir görüntüsünü yapabilirim . O savezaman görüntüyü yapabilirim . Veya ben exportkonteyner doğrudan. Ve her iki yol da ( savegörüntü ve exportkap) aynı sonucu verecek mi?
Thomas Uhrig

2
Evet ve hayır. exportSize konteyner dosya sistemini içeren arşiv .tar bir daire verecek. savegörüntüyü oluşturmak için gereken tüm zincirin katmanlarını ve meta verilerini paketleyecektir. Daha sonra bu " saved" resim zincirini başka bir docker örneğine yükleyebilir ve bu resimlerden kapsayıcılar oluşturabilirsiniz.
mbarthelemy

7
@ThomasUhrig Kapsayıcıyı bir katmana / temel görüntüye "düzleştirmek" için dışa aktarmayı kullanabilirsiniz. Ayrıca kapsayıcı (fe veri kapsayıcısı) yedeklemek için kullanabilirsiniz. Ancak bu exportişlevsiz de yapılabilir .
Jiri

9
Ayrıca, exporttüm meta veriler kaybolacaktır, bu nedenle kapsayıcıyı bu görüntü ile çalıştırmaya çalışmanız durumunda CMD ve diğer met verileri ifade edersiniz. savebenim için iyi çalıştı ama ihracat acı oldu
Mirage

1
Resmimi en son sürüme güncellemek istiyorum. Şu anda çalışan kapsayıcı, iç dosya sisteminde bazı değişiklikler yaptı. Yükseltmeden sonra bu değişikliklerin geri yüklenmesini istiyorum. Anladığım kadarıyla, hem kaydet / yükle hem de dışa aktar / içe aktar, benim için yeni bir görüntü oluşturacak, bu benim istediğim şey değil. Dockerhub'dan görüntünün yeni bir sürümünü kullanmak istiyorum, ancak mevcut kapsayıcıdan verileri geri yüklemek istiyorum. En iyi hareket şekli nedir?
Dmitry z

20

Komutlar saveile exportkomutlar arasında iki ana fark vardır .

  1. savecommand tüm görüntüyü geçmiş ve meta verilerle kaydeder, ancak exportkomut yalnızca dosya yapısını dışa aktarır (geçmiş ve meta veriler olmadan). Böylece dışa aktarılan tar dosyası kaydedilen dosyadan daha küçük olacaktır.

  2. Eğer yeni bir imaj oluşturmak için ihraç dosya sistemini kullandığınızda o zaman bu yeni görüntü içermeyen herhangi edecek USER, EXPOSE, RUNsenin Dockerfile vb komutlar. Yalnızca dosya yapısı aktarılacaktır. Dolayısıyla, Dockerfile dosyasında belirtilen anahtar kelimeleri kullanırken, görüntüyü başka bir makineye aktarmak için dışa aktar komutunu kullanamazsınız - her zaman save komutunu kullanmanız gerekir.


4

Dışa aktarılan görüntüde herhangi bir katman veya geçmiş bilgisi kaydedilmez, bu nedenle daha küçük olur ve geri alamazsınız.

Kaydedilen görüntü olacak katman ve geçmiş bilgilerini, yani daha büyük var.

Eğer bunu bir müşteriye veriyorsanız, bu katmanları saklamak isteyip istemediğinizi sormak ister misiniz?


yani, bir ihracat hiçbir şey doğru yazılmış bir txt dosyasına benzer ?? @neil
AATHITH RAJENDRAN

4
arabellek 8 olmadan bir metin dosyası gibi)
Neil McGill

2

Teknik olarak, kaydet / yükle, katmanlar olarak da adlandırılan bir veya daha fazla görüntü olabilen depolarla çalışır. Görüntü, bir repo içindeki tek bir katmandır. Son olarak, bir kap somutlaştırılmış bir görüntüdür (çalışıyor ya da çalışmıyor).


1

Docker save Görüntüden sağlanan her bağımsız değişken için tüm üst katmanları ve tüm etiketleri + sürümlerini veya belirtilen repo: etiketini içeren bir tar dosyası repo üretir .

Docker dışa aktarma Kapsayıcıdan belirtilen birimlerin içeriği olmadan düz içerikli belirtilen dosyayı (katran veya tgz olabilir) üretir .

liman işçisi kurtardı liman işçisi iken liman işçisi resmin üzerine kullanmaya gerek ihracat gerek konteyner kullanmak (sadece görüntü çalışan benzeri)

Kullanımı Kaydet

liman işçisi kaydetme [SEÇENEKLER] GÖRÜNTÜ [GÖRÜNTÜ ...]

Görüntüleri bir tar arşivine kaydetme (varsayılan olarak STDOUT'a aktarılır)

--help = false Yazdırma kullanımı -o, --output = "" STDOUT yerine bir dosyaya yazma

ihracat Kullanımı

liman işçisi ihracatı [OPTIONS] KONTEYNER

Bir kabın dosya sisteminin içeriğini tar arşivi olarak dışa aktarma

--help = false Yazdırma kullanımı -o, --output = "" STDOUT yerine bir dosyaya yazma


1
Soru, genelleştirilmiş tanım ve kullanımla ilgili olmayan iki komut arasındaki farkla ilgilidir!
Abu Shumon

0

export: container (filesystem)-> image tar.
import: exported image tar-> image. Sadece bir katman.

save: image-> image tar.
load: saved image tar-> image. Tüm katmanlar geri kazanılacaktır.

Gönderen Eylem Docker, İkinci Baskı P190.

Katmanlı görüntüler görüntünün geçmişini, kapsayıcı oluşturma meta verilerini ve silinmiş veya geçersiz kılınmış olabilecek eski dosyaları korur.

Düzleştirilmiş görüntüler yalnızca dosya sistemindeki geçerli dosya kümesini içerir.

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.