Apa perbedaan antara simpan dan ekspor di Docker?

157

Saya bermain-main dengan Docker selama beberapa hari dan saya sudah membuat beberapa gambar (yang benar-benar menyenangkan!). Sekarang saya ingin melanjutkan pekerjaan saya dan datang ke savedan exportmemerintahkan, tetapi saya tidak sepenuhnya memahaminya.

Apa perbedaan antara savedan exportdi Docker?

Thomas Uhrig
sumber
4
Saya juga menulis posting blog tentang ini di tuhrig.de/difference-between-save-and-export-in-docker
Thomas Uhrig

Jawaban:

169

Jawaban singkatnya adalah:

  • saveakan mengambil gambar: untuk VM atau server fisik, itu akan menjadi instalasi .ISO image atau disk. Sistem operasi dasar.

    Ini akan mengemas lapisan dan metadata dari semua rantai yang diperlukan untuk membangun gambar. Anda kemudian dapat memuat rantai gambar "tersimpan" ini ke instance buruh pelabuhan lain dan membuat wadah dari gambar-gambar ini.

  • exportakan mengambil seluruh wadah: seperti snapshot dari VM biasa. Menghemat OS tentu saja, tetapi juga setiap perubahan yang Anda buat, file data apa pun yang ditulis selama masa pakai wadah. Yang ini lebih mirip cadangan tradisional.

    Ini akan memberi Anda arsip .tar datar yang berisi sistem file wadah Anda.

Sunting: karena penjelasan saya mungkin masih mengarah pada kebingungan, saya pikir penting untuk memahami bahwa salah satu dari perintah ini bekerja dengan kontainer, sementara yang lain bekerja dengan gambar.

  • Suatu gambar harus dianggap 'mati' atau tidak dapat diubah, mulai dari 0 atau 1000 kontainer darinya tidak akan mengubah satu byte. Itu sebabnya saya membuat perbandingan dengan sistem menginstal ISO sebelumnya. Mungkin lebih dekat ke live-CD.

  • Sebuah wadah "sepatu" gambar dan menambahkan lapisan tambahan di atas itu. Lapisan ini menyimpan setiap perubahan pada wadah (file yang dibuat / diubah / dihapus ...).

mbarthelemy
sumber
2
Hanya untuk klarifikasi saya: Mari kita asumsikan saya memiliki wadah berjalan di mana saya melakukan beberapa perubahan (misalnya saya membuat folder baru). Sekarang saya bisa membuat gambar wadah ini (dengan docker commit). Saya kemudian bisasave gambar. Atau saya bisa exportwadahnya langsung. Dan kedua cara ( savegambar dan exportwadah) akan memiliki hasil yang sama?
Thomas Uhrig
2
Iya dan tidak. Ini exportakan memberi Anda arsip .tar datar yang berisi sistem file wadah Anda. saveakan mengemas lapisan dan metadata dari semua rantai yang diperlukan untuk membangun gambar. Anda kemudian dapat memuat " saved" rantai gambar ini ke instance buruh pelabuhan lain dan membuat wadah dari gambar ini.
mbarthelemy
7
@ThomasUhrig Anda dapat menggunakan ekspor untuk "meratakan" wadah ke satu layer / gambar dasar. Anda juga dapat menggunakannya untuk membuat cadangan wadah (wadah data fe). Tetapi ini bisa dilakukan tanpaexport fungsi juga.
Jiri
9
Juga, dengan exportsemua metadata akan hilang, jadi jika Anda mencoba menjalankan wadah dengan gambar itu, Anda memiliki CMD dan metdata lainnya. savebekerja dengan baik untuk saya tetapi ekspor sangat menyakitkan
Mirage
1
Saya ingin memperbarui gambar saya ke versi terbaru. Wadah yang sedang berjalan sekarang telah membuat beberapa perubahan pada sistem file internal. Setelah peningkatan, saya ingin perubahan ini dipulihkan. Seperti yang saya pahami, baik simpan / muat dan ekspor / impor akan membuat gambar baru untuk saya, yang bukan yang saya inginkan. Saya ingin menggunakan versi baru gambar dari dockerhub, tetapi mengembalikan data dari wadah yang ada. Apa tindakan terbaik?
Dmitry z
20

Ada dua perbedaan utama antara savedan exportperintah.

  1. saveperintah menyimpan seluruh gambar dengan histori dan metadata tetapi exportperintah hanya mengekspor struktur file (tanpa histori dan metadata). Jadi file tar yang diekspor akan lebih kecil daripada yang disimpan.

  2. Ketika Anda menggunakan sistem file yang diekspor untuk membuat gambar baru maka gambar baru ini tidak akan mengandung USER,EXPOSE , RUNdll perintah dari Dockerfile Anda. Hanya struktur file yang akan ditransfer. Jadi ketika Anda menggunakan kata kunci yang disebutkan di Dockerfile Anda maka Anda tidak dapat menggunakan perintah ekspor untuk mentransfer gambar ke komputer lain - Anda harus selalu menggunakan perintah save.

eNca
sumber
4

Gambar yang diekspor tidak akan menyimpan informasi lapisan atau riwayat, sehingga akan lebih kecil dan Anda tidak akan dapat mengembalikan.

Gambar yang disimpan akan memiliki informasi lapisan dan riwayat, jadi lebih besar.

Jika memberikan ini kepada pelanggan, Q adalah apakah Anda ingin menyimpan lapisan-lapisan itu atau tidak?

Neil McGill
sumber
jadi, ekspor mirip dengan file txt tanpa tulisan tertulis kan ?? @neil
AATHITH RAJENDRAN
4
itu seperti file teks tanpa buffer 8)
Neil McGill
2

Secara teknis, save / load berfungsi dengan repositori yang dapat berupa satu atau lebih gambar, juga disebut sebagai lapisan. Gambar adalah lapisan tunggal dalam repo. Akhirnya, sebuah wadah adalah gambar instantiated (berjalan atau tidak).

ayahlinux
sumber
1

Docker save Menghasilkan repo file tar yang berisi semua lapisan induk, dan semua tag + versi, atau tag repo: yang ditentukan, untuk setiap argumen yang disediakan dari gambar .

Ekspor Docker Menghasilkan file yang ditentukan (bisa tar atau tgz) dengan konten datar tanpa isi volume yang ditentukan dari Container .

buruh pelabuhan menghemat perlu digunakan pada gambar buruh pelabuhan sementara ekspor buruh pelabuhan perlu digunakan pada wadah (seperti halnya gambar berjalan)

Hemat Penggunaan

buruh pelabuhan simpan [PILIHAN] GAMBAR [GAMBAR ...]

Menyimpan gambar ke arsip tar (dialirkan ke STDOUT secara default)

--help = false Print use -o, --output = "" Tulis ke file, bukan STDOUT

ekspor Penggunaan

buruh pelabuhan ekspor [PILIHAN] KONTAINER

Mengekspor konten sistem file kontainer sebagai arsip tar

--help = false Print use -o, --output = "" Tulis ke file, bukan STDOUT

Sachin Gade
sumber
1
Pertanyaannya adalah tentang perbedaan antara dua perintah, bukan tentang definisi umum dan penggunaan!
Abu Shumon
0

export: container (filesystem)-> image tar.
import: exported image tar->image . Hanya satu lapisan.

save: image-> image tar.
load: saved image tar-> image. Semua lapisan akan dipulihkan.

Dari Docker in Action, Edisi Kedua p190.

Gambar berlapis mempertahankan sejarah gambar, metadata pembuatan wadah, dan file lama yang mungkin telah dihapus atau diganti.

Gambar yang diratakan hanya berisi kumpulan file saat ini pada sistem file.

Youngsend
sumber