Bagaimana cara mentransfer gambar Docker dari satu mesin ke mesin lain tanpa menggunakan repositori, tidak masalah pribadi atau publik?
Saya membuat gambar saya sendiri di VirtualBox, dan ketika sudah selesai saya mencoba untuk menyebarkan ke mesin lain untuk memiliki penggunaan nyata.
Karena didasarkan pada gambar saya sendiri (seperti Red Hat Linux), itu tidak dapat dibuat kembali dari Dockerfile. Dockerfile saya tidak mudah dibawa-bawa.
Apakah ada perintah sederhana yang bisa saya gunakan? Atau solusi lain?
repo:tag
sebagai referensi gambar daripadaimage id
. Jika Anda menggunakanimage id
, gambar yang dimuat tidak akan mempertahankan tag (dan Anda harus melakukan langkah lain untuk memberi tag pada gambar).docker images
, kemudian gunakandocker tag DESIREDIMAGEID mycompany/myreponame
. Jika id gambar Anda adalah 591de551d6e4, Anda dapat menyingkat id gambar:docker tag 59 mycompany/myreponame
Mentransfer gambar Docker melalui SSH, mem-bzipping konten dengan cepat:
Sebaiknya letakkan
pv
di tengah pipa untuk melihat bagaimana transfer berlangsung:(Info lebih lanjut tentang
pv
: halaman rumah , halaman manual ).sumber
docker $(docker-machine config mach1) save <image> | docker $(docker-machine config mach2) load
untuk menyalin gambar antara mesin mach1 dan mach2 .eval $(docker-machine env dev)
baik untuk komunikasi umum dengan satu host buruh pelabuhan tetapi tidak untuk menyalin antara dua mesin, karena ini melibatkan dua host buruh pelabuhan / mesin buruh pelabuhan yang berbeda.ssh target_server 'docker save image:latest | bzip2' | pv | bunzip2 | docker load
docker save my_img:v1 | ssh -t -t my_user@my_machine sudo docker load
. Tanpa tombol "-t", sudo mengeluh kepada sudo: maaf, Anda harus memiliki tty untuk menjalankan sudo ; dengan satu "-t" itu pesan yang sama karena ssh mengatakan Pseudo-terminal tidak akan dialokasikan karena stdin bukan terminal. dan akhirnya, dengan dua "-t", saya mendapatkan konten file tar (yaitu gambar) pada terminal saya. Ada ide?Untuk menyimpan gambar ke jalur file apa pun atau tempat NFS bersama, lihat contoh berikut.
Dapatkan id gambar dengan melakukan:
Katakanlah Anda memiliki gambar dengan id "matrix-data".
Simpan gambar dengan id:
Salin gambar dari jalur ke host mana pun. Sekarang impor ke instalasi Docker lokal Anda menggunakan:
sumber
Pertama-tama simpan gambar Docker ke file zip:
Kemudian muat gambar yang diekspor ke Docker menggunakan perintah di bawah ini:
sumber
docker load < my-image.tar.gz
sudah cukup. Gambar akan didekompresi secara otomatis untuk gzip, bzip2, dan xz.Lari
untuk melihat daftar gambar pada host. Katakanlah Anda memiliki gambar yang disebut awesomesauce . Di terminal Anda,
cd
ke direktori tempat Anda ingin mengekspor gambar. Sekarang jalankan:Salin file tar ke thumb drive atau apa pun, dan kemudian salin ke komputer host baru.
Sekarang dari host baru lakukan:
Sekarang pergi minum kopi dan membaca Berita Peretas ...
sumber
docker save [image] -o file.tar
dandocker load -i file.tar
untuk menghindari ini!docker save [image] -o file.tar
juga tampak lebih cepatUntuk ekspor sistem file kontainer yang rata, gunakan;
docker export CONTAINER_ID > my_container.tar
Gunakan
cat my_container.tar | docker import -
untuk mengimpor gambar tersebut.sumber
cat my_container.tar | docker import - my_container:new
jika mengimpor secara lokal sesuai dengan bantuan cmdSaat menggunakan mesin buruh pelabuhan, Anda dapat menyalin gambar antar mesin
mach1
danmach2
dengan:Dan tentu saja Anda juga bisa tetap
pv
di tengah untuk mendapatkan indikator proses:Anda juga dapat menghilangkan salah satu
docker-machine config
sub-shell, untuk menggunakan host docker default Anda saat ini.untuk menyalin gambar dari host docker saat ini ke
mach
atau
untuk menyalin dari
mach
ke host buruh pelabuhan saat ini.sumber
Saya berasumsi Anda harus menyimpan
couchdb-cartridge
yang memiliki id gambar 7ebc8510bc2c:Simpan gambar archiveName ke file tar. Saya akan menggunakan
/media/sf_docker_vm/
untuk menyimpan gambar.Salin file archiveName.tar untuk contoh Docker baru Anda menggunakan metode apapun karya di lingkungan Anda, misalnya
FTP
,SCP
, dllJalankan
docker load
perintah pada instance Docker baru Anda dan tentukan lokasi file tar gambar.Akhirnya, jalankan
docker images
perintah untuk memeriksa bahwa gambar sekarang tersedia.Silakan temukan pos terperinci ini .
sumber
Untuk mentransfer gambar dari instalasi Docker lokal Anda ke minikube VM:
sumber
docker-push-ssh
adalah utilitas baris perintah yang saya buat hanya untuk skenario ini.Ini membuat registri Docker pribadi sementara di server, membuat terowongan SSH dari localhost Anda, mendorong gambar Anda, lalu membersihkannya sendiri.
Manfaat dari pendekatan ini berakhir
docker save
(pada saat penulisan sebagian besar jawaban menggunakan metode ini) adalah bahwa hanya lapisan baru yang didorong ke server, menghasilkan unggahan yang jauh lebih cepat.Seringkali menggunakan registry perantara seperti dockerhub tidak diinginkan, dan rumit.
https://github.com/brthor/docker-push-ssh
Install:
Contoh:
docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image
Peringatan terbesar adalah bahwa Anda harus secara manual menambahkan localhost Anda ke
insecure_registries
konfigurasi Docker . Jalankan alat ini sekali dan itu akan memberi Anda kesalahan informatif:Di mana saya harus mengatur flag '--insecure-registry' pada Mac OS?
sumber
Semua jawaban lain sangat membantu. Saya baru saja melalui masalah yang sama dan mencari cara mudah dengannya
docker machine scp
.Sejak Docker Machine v0.3.0, scp diperkenalkan untuk menyalin file dari satu mesin Docker ke yang lain. Ini sangat nyaman jika Anda ingin menyalin file dari komputer lokal Anda ke mesin Docker jarak jauh seperti AWS EC2 atau Digital Ocean karena Mesin Docker mengurus kredensial SSH untuk Anda.
Menyimpan gambar Anda menggunakan
docker save
seperti:Salin gambar menggunakan docker-machine scp
Asumsikan mesin Docker jarak jauh Anda adalah
remote-machine
dan direktori yang Anda inginkan adalah file tar/home/ubuntu
.Muat gambar Docker
sumber
Saya ingin memindahkan semua gambar dengan tag.
Penjelasan:
Pertama
OUT
mendapatkan semua tag tetapi dipisahkan dengan baris baru. KeduaOUTPUT
mendapatkan semua tag dalam array. Ketiga$(echo "${OUTPUT[*]}")
menempatkan semua tag untuk satudocker save
perintah sehingga semua gambar berada dalam satu tar.Selain itu, ini dapat dizip menggunakan gzip. Sesuai target, jalankan:
-O
pilihan untuktar
meletakkan konten di stdin yang bisa diambildocker load
.sumber
Anda dapat menggunakan
sshfs
:sumber
Skrip untuk menjalankan fungsi penyimpanan dan muat Docker (dicoba dan diuji):
Docker Simpan:
Beban Docker:
sumber
Anda bisa menggunakan satu-baris dengan
DOCKER_HOST
variabel:sumber