Menjalankan docker-compose.yml yang sudah ada di atas Podman dengan podman-compose: memahami anatomi manifest, kompatibilitas API Docker, integrasi Podman Desktop sebagai GUI, serta membuka socket Docker API lewat podman system service agar tooling docker-compatible tetap berfungsi.

Di episode 11 kalian merapikan konfigurasi dan storage Podman: containers.conf, registries.conf, storage.conf, sampai pemahaman layout overlayfs untuk container rootless maupun rootful. Sekarang giliran menaikkan level dari container tunggal ke banyak container sekaligus. Episode 12 membuka fase orchestration: menjalankan docker-compose.yml yang sudah kalian punya di atas Podman, memanfaatkan Podman Desktop sebagai GUI, dan mengekspos socket Docker API supaya ekosistem tooling Docker tetap kompatibel.
Podman memang menyelesaikan masalah daemon, tetapi mendefinisikan puluhan container satu per satu lewat perintah podman run tidak praktis. Compose menjawab kebutuhan mendeklarasikan seluruh aplikasi — web, API, database, cache, worker — dalam satu manifest yang bisa di-review, di-version-control, dan di-reproduksi di lingkungan lain.
Di atas Podman ada dua jalur utama untuk memakai konsep compose:
docker-compose.yml lalu menerjemahkannya menjadi perintah Podman.podman system service menyediakan API Docker-compatible, sehingga tooling seperti docker compose dan docker-py bisa diarahkan ke Podman.Keduanya membuat perpindahan dari Docker ke Podman terasa hampir tanpa gesekan.
Manifest compose adalah dokumen YAML dengan beberapa bagian top-level. Contoh aplikasi tiga service:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- api
api:
build: ./api
environment:
DB_HOST: postgres
secrets:
- db_password
postgres:
image: docker.io/library/postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
secrets:
db_password:
file: ./secrets/db_password.txt
volumes:
pgdata:Bagian services mendefinisikan container; volumes, networks, dan secrets adalah resource bersama yang dirujuk dari service. Inilah yang dimaksud dengan deklaratif: kalian menyatakan apa yang diinginkan, bukan bagaimana menjalankannya.
| Elemen Compose | Padanan di Podman |
|---|---|
services | podman run atau unit Quadlet .container |
volumes | podman volume create |
networks | podman network create |
ports | flag -p pada podman run |
environment | flag -e atau --env-file |
restart | flag --restart |
depends_on | urutan start ditangani podman-compose |
depends_on tidak berarti "menunggu sampai database siap", hanya "mulai setelah database dimulai". Healthcheck tetap tanggung jawab kalian di level aplikasi.
Install podman-compose lalu jalankan di direktori yang berisi docker-compose.yml:
podman-compose up -d
podman-compose ps
podman-compose logs -f api
podman-compose downpodman-compose up -d membaca manifest dan menciptakan network, volume, serta container yang dibutuhkan. Karena diterjemahkan menjadi perintah Podman biasa, container yang dihasilkan tidak dikelola daemon — kalian bisa memeriksanya langsung dengan podman ps dan podman inspect.
Tip
podman-compose bukan daemon dan tidak mengunci manifest. Jika ada satu service yang perlu dijalankan manual dengan flag khusus, kalian tetap bisa podman run service tersebut dan membiarkan podman-compose mengelola sisanya — tidak ada double-booking seperti pada engine berbasis daemon.
Istilah "kompatibel" perlu dipahami dengan tepat. podman-compose membaca format file docker-compose.yml yang sama, tetapi menjalankannya melalui mekanisme Podman. Artinya:
Bagi sebagian besar stack — web plus database plus cache — kompatibilitas ini sudah lebih dari cukup.
Podman Desktop adalah GUI resmi dari proyek Podman. Kalian bisa mengelola container, pod, image, volume, hingga deployment ke Kubernetes tanpa mengetik perintah. Untuk komposisi multi-container, Podman Desktop membaca docker-compose.yml dan menyediakan tampilan grafis untuk menjalankan dan memantau stack. Ini pilihan yang nyaman saat onboarding anggota tim yang belum akrab dengan CLI.
Selain podman-compose, Podman bisa berbicara sebagai Docker Engine melalui endpoint API yang kompatibel. Perintah kuncinya:
podman system service --time=0 unix:///tmp/podman.sockDengan --time=0 layanan tidak pernah timeout. Sekarang DOCKER_HOST bisa diarahkan ke socket tersebut:
export DOCKER_HOST=unix:///tmp/podman.sock
docker compose up -dImportant
Secara default podman system service berjalan di foreground dan menunggu di socket unix. Untuk produksi, jalankan sebagai unit systemd dan batasi akses ke socket hanya untuk pengguna yang dipercaya — socket ini punya hak untuk menjalankan container atas nama kalian.
Karena socket di atas menyajikan API yang kompatibel dengan Docker Engine, banyak tooling yang selama ini dipakai bersama Docker langsung berfungsi tanpa modifikasi:
docker ps, docker build, docker exec.docker compose.Praktik inilah yang membuat Podman dijuluki drop-in replacement untuk Docker: pada level protokol, klien tidak bisa membedakannya.
Pada episode 12 ini kalian menjalankan stack multi-container di atas Podman: membaca dan memahami anatomi docker-compose.yml, menerjemahkannya dengan podman-compose, mengenal Podman Desktop sebagai GUI, membuka socket Docker API dengan podman system service --time=0, dan memakai tooling docker-compatible lewat DOCKER_HOST.
Inti yang harus dibawa pulang:
docker-compose.yml bisa dijalankan oleh Docker maupun Podman.podman.podman system service --time=0 membuka gerbang Docker API untuk seluruh ekosistem tooling.Di episode 13 berikutnya kita masuk ke fase keamanan: security model — bagaimana user namespaces, SELinux, AppArmor, capabilities, dan seccomp bekerja sama mengamankan container kalian. Inilah lapisan yang menentukan seberapa jauh kalian berani menjalankan workload yang tidak dipercaya.