Satu hal keren tentang menggunakan alat kontainer seperti Podman, Buildah, CRI-O, dan Skopeo, adalah bahwa mereka didasarkan pada perpustakaan yang sama untuk menarik dan mendorong gambar, yaitu wadah/gambar. Saya sering mendeskripsikan containers/image
proyek sebagai perpustakaan untuk menyalin gambar antara berbagai jenis penyimpanan kontainer. Penyimpanan ini bisa di registri kontainer, dalam kontainer/penyimpanan, sebagai objek sistem file seperti direktori atau tarball, dan bahkan langsung di daemon Docker. Mekanisme untuk memindahkan gambar kontainer ini di antara berbagai jenis penyimpanan kontainer disebut transportasi . Salah satu fitur containers/image
yang paling sedikit dipahami adalah berbagai transportasi yang didukungnya.
Transportasi
Gambar ditentukan menggunakan transport:ImageName format. Jika tidak ada transport yang ditentukan, docker
(registri penampung) transportasi digunakan secara default di semua alat selain Skopeo. Skopeo mengharuskan pengguna untuk selalu mengatur transportasi.
Salah satu hal keren yang dilakukan Docker adalah menemukan ide registri penampung , yang pada dasarnya adalah server web yang berisi gambar kontainer. Docker.io, quay.io, dan Artifactory adalah contoh pendaftar container. Tim teknik Docker mendefinisikan protokol untuk menarik dan mendorong gambar-gambar ini dari pendaftar penampung, yang kami sebut sebagai docker
transportasi.
[ Anda mungkin juga menikmati: 12 panduan Podman untuk memulai container ]
docker://docker-reference
Referensi gambar disimpan dalam registri gambar penampung jarak jauh. Contoh:quay.io/podman/stable:latest
. Referensi dapat menyertakan nama host ke registri tertentu.
$ skopeo copy docker://docker.io/alpine dir:/tmp/alpine
$ podman run docker://registry.fedoraproject.org/fedora:latest echo hello
Untuk Podman dan Buildah, docker://
adalah transportasi default. Itu dapat dijatuhkan untuk kenyamanan:
$ podman pull registry.fedoraproject.org/fedora:latest
Saat menggunakan nama pendek untuk menarik gambar seperti fedora
, Podman dan Buildah menggunakan daftar registri untuk membuat referensi Docker dan kemudian memanggilnya menggunakan docker://
transportasi.
Containers/image
juga mendukung banyak transportasi lain untuk menyalin dan menyimpan gambar kontainer.
oci:path
oci
transport mengekspor/mengimpor konten image container ke direktori lokal, dengan asumsi image tersebut sesuai dengan Spesifikasi Tata Letak Gambar Kontainer Terbuka. Manifes dan tarbal lapisan diekspor ke direktori sebagai file individual.
$ skopeo copy oci:/tmp/myimage docker://registry.example.com/myimage
$ podman run oci:/tmp/fedora echo hello
dir
dir
transport membuang konten gambar kontainer ke direktori lokal, sekali lagi dengan asumsi gambar sesuai dengan tata letak gambar Docker. Manifes, tarball lapisan, dan tanda tangan diekspor sebagai file individual ke dalam direktori. Ini adalah format non-standar, terutama berguna untuk debugging atau inspeksi kontainer non-invasif. Ini sangat mirip dengan oci
transport tetapi menyimpan file menggunakan format buruh pelabuhan lama.
$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman run dir:/tmp/fedora echo hello
arsip buruh pelabuhan
Cara lain yang dikembangkan oleh para insinyur Docker untuk menyimpan dan mengangkut gambar kontainer adalah menggunakan tar
. Sebuah tarball berisi semua file yang membentuk gambar kontainer. Tarball ini awalnya dibuat menggunakan docker save
dan podman save
perintah. Mereka dapat dimuat kembali ke penyimpanan lokal mesin kontainer menggunakan docker load
dan podman load
. container/image
library membuat format arsip ini menjadi transport, memungkinkannya untuk digunakan secara langsung oleh perintah lain seperti podman run dir:/tmp/fedora.tag echo hello
, atau buildah from dir:/tmp/fedora.tar
$ skopeo copy docker://registry.fedoraproject.org/fedora:latest docker-archive:/tmp/fedora.img
$ podman run docker-archive:/tmp/fedora.img echo hello
Peringatan :Menggunakan docker-archive
hampir tidak pernah merupakan hal yang benar untuk dilakukan. Formatnya sangat boros baik untuk penyimpanan maupun I/O. Saya akan merekomendasikan agar pengguna menjalankan docker/distribution
sementara sebagai gantinya.
arsip-oci
Format ini mirip dengan docker-archive
, tetapi alih-alih menjadi format lama, ini akan menyimpan satu gambar dalam Format OCI. Jalur tersebut adalah gambar yang sesuai dengan Spesifikasi Tata Letak Gambar Penampung Terbuka dalam direktori pada jalur yang ditentukan dan diberi label dengan tag.
$ skopeo copy docker-archive:/tmp/fedora.img oci-archive:/tmp/fedora-oci.img
$ podman run oci-archive:/tmp/fedora-oci.img echo hello
docker-daemon
Salah satu fitur paling keren dari containers/image
adalah dukungan untuk docker-daemon
mengangkut. Docker dan Podman tidak berbagi penyimpanan yang sama. Mereka tidak bisa karena Docker mengontrol penguncian ke penyimpanannya di dalam daemon. Meskipun Podman, Buildah, CRI-O, dan Skopeo dapat berbagi konten, mereka menggunakan sistem file melalui containers/storage
.
Podman dan alat lainnya dapat bekerja dengan docker-daemon
penyimpanan secara tidak langsung, melalui docker-daemon
mengangkut. Hal ini memungkinkan mesin kontainer untuk secara langsung mengakses gambar yang sebelumnya ditarik oleh daemon Docker atau gambar yang dibuat oleh docker build
. Anda juga dapat memindahkan gambar yang dibuat oleh Buildah dan Podman langsung ke daemon Docker.
Sesuatu seperti ini:
podman run docker-daemon:alpine echo hello
Catatan :Podman menarik gambar keluar dari daemon Docker, menyimpan gambar di containers/storage
, dan kemudian menjalankan penampung. Itu tidak menggunakan penyimpanan Docker secara langsung. Agar Podman dapat berkomunikasi dengan Docker, kita harus menjalankannya sebagai root karena daemon Docker memerlukan hak akses root.
$ sudo docker pull fedora
$ sudo podman run docker-daemon:docker.io/library/fedora echo hello
Jika Anda membuat gambar melalui buildah
, Anda dapat memasukkan gambar langsung ke docker-daemon
:
# ctr=$(buildah from fedora)
# mnt=$(buildah mount $ctr)
# install -m 0744 start.sh $/mnt
# buildah commit $ctr docker-damon:myimage
Catatan :Meskipun keren menggunakan docker-daemon
transportasi seperti ini, ini adalah fitur pilihan terakhir dengan I/O dan biaya penyimpanan yang sangat besar. Mengonsolidasikan proses untuk dijalankan di salah satu storage/ecosystem
hampir selalu lebih baik. Misalnya, akan lebih baik untuk mengeluarkan gambar dari daemon Docker dan kemudian cukup menggunakan containers/storage
untuk menjalankannya.
$ sudo podman pull docker-daemon:registry.fedoraproject.org/library/fedora
$ podman run fedora echo hello
penyimpanan kontainer
"Transport" terakhir sebenarnya bukan transport sama sekali, tetapi lebih merupakan mekanisme untuk menyimpan gambar dalam penyimpanan lokal yang dibuat menggunakan containers/storage
Perpustakaan. Format docker-reference
dijelaskan secara rinci dalam transportasi Docker.
$ skopeo copy docker://registry.access.redhat.com/ubi8:latest containers-storage:ubi8:latest
Buildah dan Podman default untuk menyimpan gambar mereka dalam penyimpanan kontainer:
$ podman image pull ubi8
Perintah Podman di atas memperluas nama pendek untuk ubi8 ke registry.access.redhat.com/ubi8:latest
dan kemudian menggunakan docker:// transport
untuk menariknya dari registry.access.redhat.com
. Kemudian menyimpan konten langsung di containers/storage
.
$ buildah push docker://quay.io/myrepo/myimage
Perintah Buildah di atas melihat ke dalam penyimpanan kontainer dan kemudian mendorong gambar menggunakan docker://
transportasi ke registri quay.io.
[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]
Kesimpulan
container/image
library menyediakan cara terbaik untuk mentransfer gambar kontainer antara mesin dan berbagai jenis penyimpanan. Ini merupakan bagian integral dari mesin kontainer dan menyediakan beberapa fitur yang sangat keren. Pelajari lebih lanjut tentang transportasi menggunakan halaman manual container-transports.