Salah satu masalah dengan pemrograman komputer adalah bahwa nama yang sama terus-menerus digunakan untuk tujuan yang berbeda. Misalnya, istilah namespace digunakan dalam banyak cara yang berbeda. Saya sering bingung ketika orang berbicara tentang namespace di dalam Kubernetes. Sebagai contoh, beberapa orang mendengar istilah tersebut dan memikirkan cluster virtual, tetapi ketika saya mendengarnya, saya memikirkan namespace Linux yang digunakan dengan pod dan container. Demikian pula, gambar dapat merujuk ke image VM, image container, atau image OCI yang disimpan di registry container.
[ Anda mungkin juga menyukai: 7 fitur pengangkut gambar/wadah Linux yang menyenangkan ]
Tapi di dunia container, tidak ada istilah yang lebih sering digunakan selain container .
Baru-baru ini seorang pengguna membuat masalah Podman, mengungkapkan rasa frustrasi mereka atas terminologi ini:
Terminologi tidak jelas:gambar vs. penampung
Pemahaman saya adalah, gambar itu adalah template read-only, sedangkan container adalah hal read-write. Selalu. Jadi jika sesuatu adalah wadah, maka podman dan buildah menganggapnya sebagai wadah. Ketika sesuatu adalah gambar, maka podman dan buildah menganggapnya sebagai gambar.
Saya memanggil buildah dari --name abc scratch. gambar buildah dan gambar podman memiliki output yang sama dan mereka tidak menganggap hal baru sebagai gambar.
podman container ls tidak menunjukkan apa-apa, jadi yang baru dari perspektif podman bukan container.
wadah builddah mengembalikan yang baru, sehingga yang baru adalah wadah (dengan CONTAINER NAME=abc , IMAGE NAME=scratch , BUILDER=*=yes IMAGE ID ="").
Jadi yang baru adalah container dari perspektif buildah, tapi bukan container dari perspektif podman. Ini benar-benar membingungkan.
Tolong jelaskan perbedaan antara container dalam hal buildah dan container dalam hal podman.
Saya memikirkan wadah sebagai menjalankan proses dalam lingkungan atau sesuatu yang siap untuk dijalankan. Sebaliknya, gambar adalah wadah berkomitmen, yang disiapkan untuk dibagikan dengan orang lain untuk membuat wadah baru.
Mesin container yang kami gunakan—Podman, Buildah, CRI-O, dan Skopeo—semuanya memiliki konsep gambar yang sama.
Gambar didefinisikan dalam wadah/gambar dan disimpan dalam penyimpanan atau pengangkutan yang berbeda, seperti pendaftar wadah, arsip Docker, arsip OCI, daemon-docker, dan wadah/penyimpanan. Saya menulis tentang jenis penyimpanan atau transportasi ini di artikel sebelumnya.
Kebanyakan orang menganggap gambar ditempatkan di wadah/penyimpanan atau pendaftar wadah. Untuk sisa deskripsi ini, kami akan berkonsentrasi pada wadah/penyimpanan.
Omong-omong, Skopeo sebenarnya bukan mesin kontainer karena tidak memiliki konsep kontainer. Sebagai gantinya, Skopeo hanya menangani gambar kontainer dan memindahkannya di antara berbagai jenis penyimpanan kontainer.
Kontainer/wadah penyimpanan
Pustaka wadah/penyimpanan juga menyediakan konsep wadah penyimpanannya sendiri. Pada dasarnya, wadah penyimpanan adalah konten penyimpanan perantara yang belum dikomit. Anggap ini sebagai file di disk dan beberapa JSON yang menjelaskan konten.
Podman, Buildah, dan CRI-O semuanya menggunakan wadah penyimpanan . Ketiga mesin kontainer juga memiliki data tambahan khusus untuk mereka sendiri.
Bangun kontainer
Wadah buildah menyertakan konten tambahan yang mengacu pada berbagai perintah yang membentuk Containerfile atau Dockerfile.
Misalnya, Workingdir, variabel Env, dan data lainnya digunakan untuk membuat image container.
Wadah Podman
Podman memiliki penyimpanan datanya sendiri yang terkait dengan wadah Podman. Ada jauh lebih banyak data yang disimpan di database Podman daripada di database Buildah. Anda dapat menganggap database Buildah sebagai bagian dari database Podman.
Kontainer CRI-O
CRI-O juga memiliki datastore sendiri untuk mendeskripsikan container-nya.
Ketiga alat tersebut telah berevolusi secara berbeda dan memiliki ide serta persyaratan yang berbeda untuk wadahnya sendiri.
Misalnya, wadah CRI-O berkembang dengan ketergantungan pada satu daemon yang mengendalikannya. Penekanannya adalah pada kinerja dan kebutuhan untuk berbagi ratusan/ribuan tanggapan terhadap CRI Kubernetes per detik. Karena CRI-O mengetahui bahwa ini adalah satu-satunya yang berhubungan dengan penyimpanan data, CRI-O dapat mengambil keuntungan dari penyimpanan informasi dalam memori. CRI-O tidak perlu khawatir dengan proses lain yang masuk dan mengubah container tanpa sepengetahuannya.
Podman, di sisi lain, perlu berurusan dengan banyak pengguna wadahnya secara bersamaan. Itu perlu lebih mengandalkan penguncian sistem file dan memastikan ratusan executable Podman dapat dengan andal berbagi penyimpanan data yang sama. Kami telah membicarakan tentang penggabungan penyimpanan data Podman ke CRI-O sehingga CRI-O dan Podman dapat bekerja sama dengan lebih baik, tetapi seiring waktu, kami merasa bahwa risiko/manfaatnya sulit untuk membenarkan penggabungan tersebut.
Buildah juga dikembangkan sebagai alat independen. Pengelola telah mendorong kembali untuk mengambil bobot dan kompleksitas yang tidak dibutuhkan dari datastore Podman dengan sedikit atau tanpa manfaat tambahan. Wadah buildah memiliki satu tujuan:Membangun citra wadah, sedangkan sebagian besar wadah Podman lebih banyak tentang menjalankan aplikasi dan layanan. Wadah buildah tidak berisi semua informasi yang dibutuhkan Podman.
Bagaimana Podman menangani wadah yang dibuat dengan buildah from scratch
perintah?
Kami masih perlu memperlakukan wadah yang dibuat sebagian ini secara berbeda. Oleh karena itu membuat Podman melihatnya sebagai setara atau bahkan terdaftar secara default di podman ps
perintah akan membuat pengguna bingung.
Kompatibilitas
Podman sebenarnya dapat bekerja dengan container ini.
Versi terbaru Podman sekarang dapat mencantumkan wadah penyimpanan yang tersedia di sistem:
$ podman ps -a --external | grep buildah
578edf9430ee scratch buildah 13 days ago storage working-container
Anda dapat memasang dan melepas wadah ini:
# podman mount working-container
/home/dwalsh/.local/share/containers/storage/overlay/a4f596beaabdc78efc7694a67d690097e327aa12bbc59165d011e62b646e93c0/merged
# podman unmount working-container
working-container
Anda juga dapat menghapus wadah ini:
$ podman rm working-container
working-container
Anda juga dapat membuat wadah ini menggunakan podman build
. Tentu saja, container ini hanya dibuat sementara selama proses build. Karena container Buildah ini tidak memiliki data yang sama dengan container Podman, Podman tidak dapat memulai dan menghentikannya, dan podman ps
tidak menunjukkannya saat sedang berjalan.
Podman juga memiliki kemampuan serupa untuk bekerja dengan container CRI-O.
[ Pelajari dasar-dasar penggunaan Kubernetes di lembar contekan gratis ini. ]
Menutup
Ketika datang ke istilah wadah , konteksnya sering kritis. Memahami perbedaan antara kegunaan sangat penting. Dalam hal alat penampung kami, kami berbagi sebagian besar konten, penyimpanan, dan pustaka yang mendasarinya. Namun ada alasan yang sah mengapa setiap alat memiliki konsep atau definisi atau wadah yang sedikit berbeda.