Podman adalah mesin kontainer yang kompatibel dengan spesifikasi Kontainer OCI. Podman adalah bagian dari RedHat Linux, tetapi juga dapat diinstal pada distribusi lain.
Karena sesuai dengan OCI, Podman dapat digunakan sebagai pengganti drop-in untuk runtime Docker yang lebih terkenal. Sebagian besar perintah Docker dapat langsung diterjemahkan ke perintah Podman.
Berikut adalah tampilan bagaimana kedua runtime tersebut bertumpuk.
Apa itu Runtime?
Bagi banyak orang, "wadah" masih merupakan "wadah Docker." Ini bukan representasi akurat dari ekosistem container saat ini. Docker menghasilkan gambar wadah OCI, yang dapat digunakan dengan runtime lain yang kompatibel. Kubernetes adalah salah satu contohnya, sedangkan Podman adalah contoh lainnya.
Akibatnya, Podman dan Docker memiliki fungsionalitas inti yang tumpang tindih. Keduanya menghasilkan gambar yang dapat digunakan pihak lain untuk menjalankan container. Kedua runtime kemudian menambahkan spesialisasi mereka sendiri di atas fitur containerization dasar.
Cara Memasang Podman
Jika Anda menggunakan RedHat Linux, Podman ada di extras
gudang. Gunakan subscription-manager
untuk menambahkan repositori. Anda kemudian dapat menggunakan yum
untuk menginstal Podman.
su - subscription-manager repos --enable rhel-7-server-extras-beta-rpms yum -y install podman
Sebagian besar distribusi Linux populer lainnya juga menyertakan Podman di repositori default mereka. Anda dapat apt install podman
, dnf install podman
atau pacman -S podman
untuk menginstalnya.
Bekerja dengan Container dan Gambar
CLI Podman sengaja diselaraskan dengan Docker. Artinya, Anda dapat menggunakan perintah Docker yang sudah dikenal untuk berinteraksi dengan container Podman:
podman pull my-image:latest podman run my-image:latest --name my-container podman ps podman rm my-container
Podman harus langsung familiar bagi pengguna Docker. Anda bisa alias docker
ke podman
dan tidak melihat perbedaan dalam penggunaan sehari-hari. Tentu saja, tidak semua fitur tersedia, namun—mencoba menggunakan perintah Docker Swarm akan menimbulkan kesalahan, karena Podman tidak memiliki apa pun yang setara dengan Swarm.
Apa Perbedaan Podman?
Meskipun terasa mirip dengan Docker, Podman memiliki beberapa perbedaan yang membedakan. Pertama dan bisa dibilang paling signifikan adalah arsitekturnya. Podman tanpa daemon —tidak ada proses jangka panjang dalam mengelola container Anda.
Saat Anda menjalankan podman
perintah, Anda berinteraksi langsung dengan proses yang memulai wadah Anda dan mengambil gambar Anda. CLI Docker bergantung pada koneksi ke daemon Docker. CLI mengirimkan perintah ke daemon, dan daemon kemudian bertindak atas perintah tersebut untuk membuat container.
Model Podman membantu mengatasi beberapa masalah seputar keamanan Docker. Kurangnya daemon sangat mengurangi permukaan serangan kontainer. Jika Anda memerlukan akses jarak jauh, Podman mengekspos REST API yang memungkinkan Anda berinteraksi dengan semua jenis sumber daya yang didukung.
Pod
Podman hadir dengan fitur unik yang sama sekali tidak dimiliki Docker. Di Podman, container dapat membentuk “pod” yang beroperasi bersama. Ini mirip dengan konsep Pod Kubernetes.
Untuk membuat Pod, gunakan pod create
perintah:
podman pod create --name my-pod
Kontainer ditambahkan ke Pod dengan menyertakan --pod
tandai dengan podman run
:
podman run --pod my-pod --name image-1 my-image:latest podman run --pod my-pod --name image-2 another-image:latest
Kontainer dalam Pod dapat dikelola secara agregat dengan menggunakan podman pod
perintah:
podman kill my-pod # Kill all containers podman restart my-pod # Restart all containers podman stop my-pod # Stop all containers
Konsep Pod sangat kuat, karena memungkinkan Anda mengelola beberapa container secara agregat. Anda dapat membuat container aplikasi, seperti frontend, backend, dan database, menambahkannya ke Pod, dan mengelolanya secara bersamaan.
Docker terdekat dengan ini adalah dengan Compose. Menggunakan Compose mengharuskan Anda untuk menulis docker-compose.yml
file dan gunakan docker-compose
yang terpisah biner. Podman memungkinkan Anda membuat Pod menggunakan satu perintah tanpa meninggalkan terminal.
Saat Anda perlu mengekspor definisi Pod, Podman akan menghasilkan manifes YAML yang kompatibel dengan Kubernetes. Anda dapat mengambil manifes dan menerapkannya langsung ke cluster Kubernetes. Ini mempersempit kesenjangan antara menjalankan container dalam pengembangan dan meluncurkannya ke infrastruktur produksi.
podman generate kube
Kontainer Tanpa Root
Podman mendukung container tanpa root. Ini membantu Anda mengunci keamanan dengan mencegah container berjalan sebagai root
. host pengguna. Docker sekarang mendukung mode rootless sebagai opsi konfigurasi daemon. Podman tidak memiliki akar sebelum Docker dan lebih menekankan penggunaannya.
Pertama, instal slirp4netns
:
yum install slirp4netns
Selanjutnya, konfigurasikan jumlah ruang nama jaringan cakupan pengguna:
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf sysctl -p /etc/sysctl.d/userns.conf
Perintah ini memungkinkan penggunaan ruang nama jaringan tanpa root
.
Sekarang, Anda siap menjalankan wadah tanpa akar! Hubungkan ke server sebagai pengguna biasa. Mulai wadah baru dengan podman run
. Itu akan dibuat dengan UID akun pengguna Anda, bukan root
.
Selain ruang nama yang sepenuhnya tanpa akar, podman
dicakup untuk pengguna saat ini secara default. Gambar dan wadah Anda disimpan di $HOME
pengguna Anda map. Saat Anda menjalankan podman ps
atau podman images
, Anda hanya akan melihat Anda konten alih-alih setiap sumber daya di sistem.
Kesimpulan
Podman adalah runtime container yang sesuai dengan OCI yang bekerja tanpa daemon. CLI mengimplementasikan semua perintah inti Docker. Anda dapat dengan mudah beralih ke Podman atau menggunakannya bersama dengan instalasi Docker yang ada.
Tidak seperti Docker, Podman memiliki dukungan kelas satu untuk mengelola banyak container. Model Pod memudahkan untuk bekerja dengan setumpuk layanan. Anda dapat menghentikan, memulai ulang, dan menghapus semua container terkait dengan menggunakan perintah tingkat pod.
Podman juga siap membantu Anda beralih ke layanan orkestrasi container. Kemampuan untuk mengekspor YAML yang kompatibel dengan Kubernetes membuat Podman lebih cocok dengan banyak lingkungan produksi dalam container. Pengembang dan operator dapat menggunakan alat yang sama untuk mengelola penampung mereka, memungkinkan lebih banyak kolaborasi dan fleksibilitas.