Podman di Ubuntu: Membangun dan Menjalankan Kontainer dengan Dockerfile (Panduan dari Pemula hingga Praktis)

目次

1. Pengantar

Evolusi Teknologi Kontainer dan Mengapa Itu Penting

Dalam beberapa tahun terakhir, pentingnya teknologi kontainer telah meningkat pesat dalam pengembangan aplikasi dan operasi. Khususnya, kemampuan untuk memastikan reproduktibilitas dengan menyelaraskan lingkungan pengembangan dan produksi telah mendapatkan dukungan kuat di kalangan insinyur.

Docker telah lama menjadi solusi dominan di bidang ini, tetapi dalam beberapa tahun terakhir, Podman muncul sebagai alternatif yang kuat. Podman menawarkan CLI (Command Line Interface) yang hampir identik dengan Docker sambil memberikan keunggulan utama seperti arsitektur tanpa daemon, operasi ringan, dan eksekusi tanpa root tanpa memerlukan hak akses root.

Mengapa “Podman + Dockerfile + Ubuntu”?

Artikel ini menjelaskan operasi kontainer modern di Linux dengan menggabungkan tiga elemen esensial: Podman, Dockerfile, dan Ubuntu.

  • Ubuntu adalah distribusi Linux yang banyak digunakan yang cocok untuk pemula dan pengguna lanjutan,
  • Dockerfile berfungsi sebagai cetak biru untuk membangun gambar kontainer,
  • Dan Podman adalah alat generasi berikutnya yang memungkinkan pengelolaan kontainer yang lebih fleksibel dan aman.

Dengan meningkatnya kesadaran keamanan, menggunakan Podman dengan Dockerfile di Ubuntu telah menjadi pilihan populer baik untuk pengembang individu maupun lingkungan perusahaan.

Tujuan dan Target Audiens

Tujuan artikel ini adalah untuk menjelaskan dengan hati-hati bagaimana membangun Dockerfile dan membuat kontainer praktis menggunakan Podman di Ubuntu.

Artikel ini ditujukan untuk pembaca seperti:

  • Mereka yang memiliki pengalaman Docker yang tertarik dengan Podman
  • Pengguna Ubuntu yang ingin mengelola kontainer dengan aman
  • Insinyur yang berencana mengadopsi teknologi kontainer dalam pekerjaan mereka
  • Pemula yang ingin mencoba menulis Dockerfile dan membangun gambar dengan Podman

Selain penggunaan dasar, artikel ini juga membahas tips pemecahan masalah, perbedaan utama dari Docker, dan strategi migrasi.

2. Apa Itu Podman?

Gambaran Umum Dasar Podman

Podman (Pod Manager) adalah alat pengelolaan kontainer generasi berikutnya yang dikembangkan oleh komunitas yang dipimpin Red Hat. Seperti Docker, ia dapat membangun, menjalankan, dan mengelola kontainer yang sesuai dengan OCI (Open Container Initiative), tetapi filosofi desain dan arsitekturnya berbeda secara signifikan.

Fitur paling menonjol adalah Podman tidak memerlukan daemon. Ini memungkinkan operasi ringan dan aman. Podman juga mendukung mode rootless, memungkinkan pengguna biasa untuk mengelola kontainer tanpa eskalasi hak istimewa. Kompatibilitas CLI-nya dengan Docker sangat tinggi, membuat migrasi menjadi sederhana.

Fitur Utama Podman

Berikut adalah beberapa fitur utama Podman:

Arsitektur Tanpa Daemon

Podman tidak bergantung pada proses daemon latar belakang untuk mengelola kontainer. Ini memungkinkan penggunaan sumber daya yang lebih efisien tanpa layanan latar belakang yang tidak perlu.

Dukungan Rootless (Pengguna Tanpa Hak Istimewa)

Podman memungkinkan pengguna non-administrator untuk memulai dan mengelola kontainer. Ini sangat meningkatkan keamanan di lingkungan multi-pengguna atau server dan secara signifikan mengurangi risiko keamanan.

CLI Kompatibel dengan Docker

Podman menggunakan struktur perintah yang hampir sama dengan Docker. Misalnya, perintah Docker berikut bekerja hampir identik di Podman:

podman build -t myimage .
podman run -it myimage bash

Akibatnya, pengguna Docker dapat bermigrasi dengan gesekan minimal.

Fungsi Pod

Podman mengintegrasikan konsep “Pod” Kubernetes, memungkinkan beberapa kontainer dikelola sebagai satu unit logis tunggal. Ini membuat Podman sangat kompatibel dengan Kubernetes dan memungkinkan transisi yang mulus dari pengembangan lokal ke lingkungan cloud.

Kompatibilitas dengan Ubuntu

Meskipun Podman banyak diadopsi di distribusi Fedora dan berbasis RHEL, ia juga berjalan stabil di Ubuntu. Ia dapat diinstal dari repositori resmi dengan konfigurasi yang relatif sederhana. Sejak Ubuntu 20.04 LTS, dukungan paket telah meningkat secara signifikan, menurunkan hambatan masuk.

3. Menginstal Podman di Ubuntu

Sebelum Memulai: Prasyarat

Sebelum menginstal Podman di Ubuntu, periksa terlebih dahulu versi Ubuntu Anda. Podman secara resmi direkomendasikan untuk Ubuntu 20.04 LTS atau lebih baru. Pada versi yang lebih lama, paket yang diperlukan mungkin tidak tersedia di repositori resmi.

Anda dapat memeriksa versi Ubuntu Anda menggunakan perintah berikut:

lsb_release -a

Menginstal Podman memerlukan hak istimewa sudo. Bahkan jika Anda berencana menggunakan Podman dalam mode rootless, hak administrator masih diperlukan selama instalasi.

Menginstal Podman dari Repositori Resmi Ubuntu

Pada versi Ubuntu terbaru seperti 20.04 atau 22.04, Podman dapat diinstal dengan mudah menggunakan APT.

sudo apt update
sudo apt install -y podman

Setelah instalasi, verifikasi bahwa Podman terinstal dengan benar dengan memeriksa versi:

podman --version

Menginstal Versi Terbaru Menggunakan PPA Resmi

Versi Podman yang disertakan dalam repositori default Ubuntu sering kali sedikit usang. Jika Anda ingin menggunakan fitur terbaru, Anda dapat menginstal Podman dari PPA resmi.

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman

Metode ini memungkinkan Anda untuk menggunakan versi Podman terbaru yang setara dengan yang ada di sistem Red Hat dan Fedora.

Uji Fungsionalitas Dasar Podman

Setelah instalasi, lakukan uji sederhana untuk mengonfirmasi bahwa Podman berfungsi dengan benar:

podman info

Perintah ini menampilkan konfigurasi Podman, versi, dan fitur yang didukung seperti mode rootless.

Anda juga dapat menguji eksekusi kontainer dengan menjalankan gambar Alpine Linux resmi:

podman run --rm -it alpine sh

Jika shell dimulai dengan sukses, Podman berfungsi dengan benar.

4. Dasar-dasar Dockerfile dan Penggunaan dengan Podman

Apa Itu Dockerfile?

Sebuah Dockerfile adalah cetak biru yang digunakan untuk membangun gambar kontainer. Ini adalah file teks yang mendefinisikan instruksi seperti gambar dasar yang digunakan, paket mana yang akan diinstal, dan file mana yang akan disalin.

Berdasarkan file ini, alat kontainer seperti Podman dan Docker dapat secara otomatis membangun lingkungan yang konsisten.

Instruksi Dockerfile umum meliputi:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

Contoh ini menginstal paket pada gambar dasar Ubuntu, menyalin skrip, dan mendefinisikan perintah eksekusi default.

Menggunakan Dockerfile dengan Podman

Podman dapat membangun gambar kontainer dari Dockerfile dengan cara yang sama seperti Docker.

1. Menyiapkan Direktori Proyek

Buat struktur direktori berikut:

project/
├── Dockerfile
└── app.sh

File app.sh dapat berisi skrip sederhana:

#!/bin/bash
echo "Hello from Podman container!"

Buat skrip tersebut dapat dieksekusi:

chmod +x app.sh

2. Membangun Gambar dengan Podman

Jalankan perintah berikut di direktori yang berisi Dockerfile:

podman build -t mypodmanapp .

Ini membuat gambar kontainer bernama mypodmanapp.

3. Memverifikasi Gambar yang Dibangun

Anda dapat mendaftarkan gambar yang tersedia dengan:

podman images

4. Menjalankan Kontainer

Mulai kontainer menggunakan gambar yang dibangun:

podman run --rm mypodmanapp

Jika dikonfigurasi dengan benar, output Hello from Podman container! akan ditampilkan.

Dockerfile vs Containerfile

Di Podman, file yang menggunakan sintaks Dockerfile juga dapat disebut Containerfile. Penamaan ini mencerminkan keinginan untuk istilah yang tidak bergantung pada Docker.

Tidak ada perbedaan fungsional antara Dockerfile dan Containerfile. Keduanya didukung sepenuhnya oleh Podman.

podman build -f Containerfile -t myimage .

Anda dapat menentukan nama file secara eksplisit menggunakan opsi -f.

5. Contoh Praktis: Membuat Kontainer Berbasis Ubuntu

Membuat Dockerfile Berbasis Ubuntu

Dari sini, kita akan melangkah melalui contoh praktis, langkah demi langkah tentang membuat Dockerfile berbasis Ubuntu dan membangun serta menjalankan image kontainer menggunakan Podman.

Pertama, buat Dockerfile sederhana berikut:

FROM ubuntu:22.04

RUN apt update && \
    apt install -y curl && \
    apt clean

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Dockerfile ini melakukan tindakan berikut:

  • Menggunakan image resmi Ubuntu 22.04 sebagai basis
  • Menginstal paket curl
  • Menyalin hello.sh dari host ke dalam kontainer
  • Menetapkan hello.sh sebagai skrip eksekusi default

Selanjutnya, buat skrip shell sederhana bernama hello.sh:

#!/bin/bash
echo "Hello, this output is from a Podman container!"

Berikan izin eksekusi pada skrip:

chmod +x hello.sh

Membangun Image dengan Podman

Setelah file siap, bangun image menggunakan perintah berikut:

podman build -t ubuntu-hello .

Opsi -t ubuntu-hello memberikan nama tag pada image, dan . di akhir menunjukkan direktori yang berisi Dockerfile.

Jika proses build selesai dengan sukses, image akan disimpan secara lokal.

podman images

Anda dapat menggunakan perintah ini untuk memverifikasi bahwa image telah dibuat.

Menjalankan dan Memverifikasi Image yang Dibuat

Jalankan kontainer dari image yang baru dibangun menggunakan perintah berikut:

podman run --rm ubuntu-hello

Contoh output:

Hello, this output is from a Podman container!

Opsi --rm secara otomatis menghapus kontainer setelah eksekusi, menjadikannya ideal untuk keperluan pengujian.

Opsional: Menjalankan Kontainer Interaktif

Jika Anda ingin berinteraksi langsung dengan kontainer, Anda dapat memulainya dengan opsi -it dan meluncurkan Bash:

podman run -it ubuntu-hello bash

Ini memungkinkan Anda menggunakan kontainer sebagai lingkungan pengembangan berbasis Ubuntu yang ringan.

6. Fitur dan Tips Podman yang Berguna

Kekuatan Podman: Fleksibilitas dan Keamanan

Sambil mempertahankan kompatibilitas dengan Docker, Podman menawarkan fitur yang memungkinkan operasi kontainer yang lebih fleksibel dan aman. Bagian ini memperkenalkan fitur praktis dan tips yang sangat berguna dalam alur kerja sehari-hari.

Operasi Aman dengan Mode Rootless

Salah satu fitur paling kuat dari Podman adalah mode rootless, yang memungkinkan pengguna biasa untuk memulai, menghentikan, dan mengelola kontainer tanpa hak istimewa administrator.

Anda dapat menjalankan kontainer tanpa sudo seperti ditunjukkan di bawah:

podman run -it ubuntu bash

Karena operasi ini terbatas pada direktori home pengguna, dampak pada seluruh sistem diminimalkan. Mode rootless sangat berguna di server bersama dan lingkungan pengembangan.

Startup Otomatis dengan Integrasi systemd

Podman mendukung integrasi native dengan systemd, memungkinkan kontainer berjalan otomatis sebagai layanan Linux.

Anda dapat menghasilkan unit layanan systemd untuk sebuah kontainer menggunakan perintah berikut:

podman generate systemd --name mycontainer --files --restart-policy=always

Perintah ini membuat file unit di bawah ~/.config/systemd/user/. Setelah dibuat, aktifkan dan jalankan layanan sebagai berikut:

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

Konfigurasi ini memastikan bahwa kontainer otomatis dimulai saat sistem boot.

Mengelola Beberapa Kontainer dengan podman-compose

Selain mengelola kontainer tunggal, Podman mendukung orkestrasi multi-kontainer. Dengan menggunakan podman-compose, Anda dapat mencapai fungsionalitas yang mirip dengan Docker Compose.

Instal podman-compose menggunakan pip:

pip install podman-compose

Karena secara besar-besaran kompatibel dengan file docker-compose.yml, Anda sering dapat menggunakan kembali konfigurasi yang ada.

Memulai layanan sesederhana menjalankan:

podman-compose up -d

Ini memungkinkan Anda untuk mereproduksi lingkungan pengembangan lengkap secara instan bahkan saat menggunakan Podman.

Perintah dan Tips Berguna Tambahan

Membersihkan Gambar dan Kontainer yang Tidak Digunakan

podman system prune -a

Perintah ini menghapus kontainer, gambar, dan file sementara yang tidak digunakan, membantu menjaga penyimpanan Anda tetap bersih.

Mengaktifkan Penyelesaian Perintah (bash/zsh)

Anda dapat menginstal dukungan penyelesaian perintah dengan paket berikut:

sudo apt install podman-docker

Ini mengaktifkan penyelesaian perintah seperti Docker untuk Podman, meningkatkan produktivitas.

7. Panduan Migrasi: Dari Docker ke Podman

Mengapa Migrasi ke Podman Semakin Diperhatikan

Docker selama ini identik dengan teknologi kontainer, tetapi dalam beberapa tahun terakhir, pergeseran menuju Podman sebagai alternatif yang lebih ringan dan aman telah mendapatkan momentum. Khususnya, Red Hat Enterprise Linux (RHEL) dan Fedora telah mengurangi dukungan Docker dan mengadopsi Podman sebagai mesin kontainer default, mendorong banyak organisasi untuk mempertimbangkan migrasi.

Bagian ini menjelaskan langkah-langkah praktis dan pertimbangan penting untuk migrasi yang lancar dari Docker ke Podman.

Kompatibilitas Perintah Antara Docker dan Podman

Podman mempertahankan tingkat kompatibilitas CLI yang tinggi dengan Docker, memungkinkan sebagian besar perintah untuk diganti secara langsung tanpa modifikasi.

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

Ini memungkinkan beralih ke Podman tanpa mengubah alur kerja Anda, yang merupakan salah satu keunggulan terbesarnya.

Mencapai Kompatibilitas Penuh dengan podman-docker

Jika skrip yang ada, pipeline CI/CD, atau alat mengasumsikan kehadiran perintah docker, Anda dapat menginstal paket podman-docker untuk membuat Podman bertindak sebagai pengganti drop-in.

sudo apt install podman-docker

Setelah instalasi, perintah docker menjadi tautan simbolik ke Podman:

which docker
# → /usr/bin/docker → symbolic link to podman

Ini memungkinkan skrip berbasis Docker yang ada untuk berjalan di Podman tanpa modifikasi.

Mengganti docker-compose dengan podman-compose

Untuk proyek yang menggunakan Docker Compose untuk mendefinisikan lingkungan multi-kontainer, podman-compose menyediakan alternatif yang kompatibel.

Sementara kompatibilitas umumnya tinggi, perhatikan keterbatasan berikut:

  • Beberapa opsi Compose (seperti depends_on) mungkin tidak didukung atau berperilaku berbeda
  • Perbedaan mungkin ada dalam perilaku logging event dan pemeriksaan kesehatan

Untuk konfigurasi khas seperti kombinasi server web dan database, migrasi biasanya sederhana.

Migrasi Gambar dan Volume

Gambar Docker yang disimpan secara lokal tidak dapat diakses langsung oleh Podman. Anda harus menarik ulang atau mengekspor dan mengimpornya.

Opsi 1: Tarik Ulang Gambar dengan Podman

podman pull ubuntu:22.04

Opsi 2: Ekspor dari Docker dan Impor ke Podman

# Export from Docker
docker save myimage > myimage.tar

# Import into Podman
podman load < myimage.tar

Ini memungkinkan gambar yang dibangun Docker untuk digunakan kembali di Podman.

Pertimbangan Migrasi Tambahan

  • Perbedaan operasi rootless : Docker biasanya mengasumsikan penggunaan root, sementara Podman dirancang untuk operasi rootless
  • Arsitektur daemon : Podman tanpa daemon, mengubah cara proses latar belakang dikelola
  • Lokasi penyimpanan log dan data berbeda dan harus ditinjau selama migrasi

8. Pertanyaan yang Sering Diajukan (FAQ)

Q1. Apa perbedaan utama antara Podman dan Docker?

A1. Perbedaan paling signifikan adalah bahwa Podman beroperasi tanpa daemon. Ini memungkinkan operasi yang lebih ringan dan aman. Podman juga mendukung mode rootless, yang memungkinkan pengelolaan container tanpa eskalasi hak istimewa. Kompatibilitas CLI dengan Docker sangat tinggi.

Q2. Apa perbedaan antara Dockerfile dan Containerfile?

A2. Tidak ada perbedaan fungsional sama sekali. Kedua file tersebut menggambarkan instruksi build container menggunakan sintaks yang identik.
Nama Containerfile lebih disukai dalam proyek yang sesuai dengan OCI untuk menghindari terminologi khusus Docker. Dalam praktiknya, Dockerfile bekerja dengan sempurna dengan Podman.

Q3. Bisakah Docker Compose digunakan dengan Podman?

A3. Docker Compose tidak didukung secara langsung, tetapi Anda dapat menggunakan podman-compose sebagai alternatif. Ini menginterpretasikan file docker-compose.yml dalam lingkungan Podman.

Beberapa opsi seperti depends_on terbatas, sehingga pengujian direkomendasikan untuk pengaturan kompleks.

Q4. Apakah Podman berjalan stabil di Ubuntu?

A4. Ya. Podman berjalan stabil di Ubuntu 20.04 LTS dan yang lebih baru. Ini tersedia di repositori resmi Ubuntu dan dapat diinstal dengan mudah menggunakan apt. Untuk versi yang lebih baru, menggunakan PPA juga merupakan opsi.

Q5. Apakah ada keterbatasan saat menggunakan mode rootless?

A5. Mode rootless membatasi operasi berprivilegi tertentu dan pengikatan ke port di bawah 1024. Namun, keterbatasan ini sering kali dapat dihindari menggunakan port forwarding. Untuk sebagian besar kasus penggunaan, mode rootless sepenuhnya praktis.

Q6. Bisakah Podman menarik image yang sama seperti Docker Hub?

A6. Ya. Podman dapat menarik image dari Docker Hub secara default. Di beberapa lingkungan, Anda mungkin perlu secara eksplisit menentukan registry dan namespace:

podman pull docker.io/library/ubuntu

Podman juga mendukung registry lain seperti Quay.io dan GitHub Container Registry.

Q7. Apakah Podman cocok untuk lingkungan produksi?

A7. Ya. Podman mencakup fitur yang diperlukan untuk penggunaan produksi, seperti konsep pod yang kompatibel dengan Kubernetes dan integrasi systemd. Di lingkungan yang sensitif terhadap keamanan, Podman mungkin merupakan pilihan yang lebih baik daripada Docker.

Podman sudah menjadi mesin container default di RHEL dan Fedora serta memiliki adopsi produksi yang luas.