Bagaimana cara berbagi Docker-Image saya tanpa menggunakan Docker-Hub?

257

Saya bertanya-tanya di mana gambar Docker disimpan di mesin host lokal saya. Bisakah saya membagikan Docker-Image saya tanpa menggunakan Docker-Hubatau Dockerfilesebenarnya Docker-Image? Dan apa yang sebenarnya terjadi ketika saya 'mendorong' Docker-Image ke Docker-Hub?

yaquawa
sumber
2
Untuk referensi di masa mendatang: artikel bagus tentang memindahkan gambar buruh pelabuhan
Mifeet

Jawaban:

243

Gambar Docker disimpan sebagai lapisan sistem file. Setiap perintah di Dockerfile membuat layer. Anda juga dapat membuat lapisan dengan menggunakan docker commitdari baris perintah setelah membuat beberapa perubahan ( docker runmungkin melalui ).

Lapisan-lapisan ini disimpan secara default di bawah /var/lib/docker. Meskipun Anda (secara teoritis) dapat mengambil file dari sana dan menginstalnya di server docker yang berbeda, mungkin ide yang buruk untuk bermain dengan representasi internal yang digunakan oleh Docker.

Ketika Anda mendorong gambar Anda, lapisan-lapisan ini dikirim ke registri (register hub docker, secara default ... kecuali Anda menandai gambar Anda dengan awalan registri lain) dan disimpan di sana. Saat mendorong, id lapisan digunakan untuk memeriksa apakah Anda sudah memiliki lapisan secara lokal atau perlu diunduh. Anda dapat menggunakan docker historyuntuk mengintip di mana lapisan (gambar lain) digunakan (dan, sampai taraf tertentu, perintah yang menciptakan lapisan)

Adapun opsi untuk berbagi gambar tanpa mendorong ke register hub docker, opsi terbaik Anda adalah:

  • docker savegambar atau docker exportwadah. Ini akan menampilkan file tar ke output standar, jadi Anda ingin melakukan sesuatu seperti docker save 'dockerizeit/agent' > dk.agent.latest.tar. Kemudian Anda dapat menggunakan docker loadatau docker importdi host yang berbeda.

  • Host registri pribadi Anda sendiri. - Sudah ketinggalan zaman, lihat komentar Lihat gambar registri buruh pelabuhan . Kami telah membangun registry yang didukung s3 yang dapat Anda mulai dan hentikan sesuai kebutuhan (semua status disimpan di ember s3 pilihan Anda) yang mudah untuk dipasang. Ini juga merupakan cara menarik untuk menonton apa yang terjadi ketika mendorong ke registri

  • Gunakan registri lain seperti quay.io (saya belum mencobanya secara pribadi), meskipun masalah apa pun yang Anda miliki dengan hub buruh pelabuhan mungkin akan berlaku di sini juga.

Abel Muiño
sumber
6
Untuk referensi di masa mendatang, tautan ke gambar registri buruh pelabuhan sudah usang. Anda sekarang harus menggunakan Docker Registry 2.0 dan kode di github / docker / distribution
RoelAdriaans
1
Saya tidak yakin dengan jelas bahwa Registry 2.0 adalah pengganti yang siap digunakan untuk yang asli. Tampaknya kehilangan beberapa fungsi dasar seperti pencarian stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers
1
Pertanyaan tentang docker save: ketika saya mendorong gambar yang berasal dari gambar lain (katakanlah python:2.7) ke registri, gambar induk tidak perlu diunggah lebih dari satu kali kecuali itu berubah. Bisakah saya menyimpan sebagian gambar untuk mencapai optimasi ukuran file yang serupa? Saya melompati lingkaran ini karena saya hobi dengan banyak gambar dan saya tidak ingin membayar untuk pendaftaran pribadi.
Pieter
4
Bisakah Anda tidak hanya menarik file src dari repo git, termasuk Dockerfile, dan docker buildpada host?
jshxe
1
@Jishaxe bagian dari build saya adalah untuk npm install... Saya tidak dapat membangun host saya karena memiliki memori yang sangat sedikit dan langkah ini selalu gagal (lihat: github.com/npm/npm/issues/5021 )
Soft Bullets
46

Berdasarkan blog ini , orang dapat membagikan gambar buruh pelabuhan tanpa registri buruh pelabuhan dengan menjalankan:

docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0

Setelah perintah ini selesai, seseorang dapat menyalin gambar ke server dan mengimpornya sebagai berikut:

docker load --input latestversion-1.0.0.tar
030
sumber
18

Mengirim gambar buruh pelabuhan ke server jarak jauh dapat dilakukan dalam 3 langkah sederhana:

  1. Secara lokal, simpan gambar buruh pelabuhan sebagai .tar :
docker save -o <path for created tar file> <image name>
  1. Secara lokal, gunakan scp untuk mentransfer .tar ke jarak jauh

  2. Di server jarak jauh, muat gambar ke buruh pelabuhan:

docker load -i <path to docker image tar file>
JSON C11
sumber