GNU/Linux >> Belajar Linux >  >> Linux

7 fitur wadah/transportasi gambar Linux yang menyenangkan

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.


Linux
  1. Apa itu Docker (dan wadah Linux?)

  2. Cara Mendaftar Kontainer Docker

  3. Apa yang ada di dalam gambar/wadah Docker?

  1. Sejarah runtime container Linux tingkat rendah

  2. Menginstal netstat pada wadah docker linux

  3. OS mana yang berjalan di wadah Docker saya?

  1. Apa perbedaan antara wadah Linux dan gambar?

  2. Cara Membuat, Mendaftar &Menghapus Wadah Docker di Linux

  3. Cara membuat gambar khusus dari wadah Docker