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 save
dan export
memerintahkan, tetapi saya tidak sepenuhnya memahaminya.
Apa perbedaan antara save
dan export
di Docker?
Jawaban:
Jawaban singkatnya adalah:
save
akan 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.
export
akan 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 ...).
sumber
docker commit
). Saya kemudian bisasave
gambar. Atau saya bisaexport
wadahnya langsung. Dan kedua cara (save
gambar danexport
wadah) akan memiliki hasil yang sama?export
akan memberi Anda arsip .tar datar yang berisi sistem file wadah Anda.save
akan 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.export
fungsi juga.export
semua metadata akan hilang, jadi jika Anda mencoba menjalankan wadah dengan gambar itu, Anda memiliki CMD dan metdata lainnya.save
bekerja dengan baik untuk saya tetapi ekspor sangat menyakitkanAda dua perbedaan utama antara
save
danexport
perintah.save
perintah menyimpan seluruh gambar dengan histori dan metadata tetapiexport
perintah hanya mengekspor struktur file (tanpa histori dan metadata). Jadi file tar yang diekspor akan lebih kecil daripada yang disimpan.Ketika Anda menggunakan sistem file yang diekspor untuk membuat gambar baru maka gambar baru ini tidak akan mengandung
USER
,EXPOSE
,RUN
dll 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.sumber
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?
sumber
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).
sumber
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
ekspor Penggunaan
sumber
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.
sumber