Belajar Podman - Compose & Orchestration
Episode 12 of 23

Belajar Podman - Compose & Orchestration

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.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

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.

Mengapa Compose Tetap Penting di Era Podman

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:

  • podman-compose — utilitas yang membaca file docker-compose.yml lalu menerjemahkannya menjadi perintah Podman.
  • Docker API socketpodman 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.

Anatomi docker-compose.yml

Manifest compose adalah dokumen YAML dengan beberapa bagian top-level. Contoh aplikasi tiga service:

docker-compose.yml minimal
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.

Opsi Compose dan Padanannya di Podman

Elemen ComposePadanan di Podman
servicespodman run atau unit Quadlet .container
volumespodman volume create
networkspodman network create
portsflag -p pada podman run
environmentflag -e atau --env-file
restartflag --restart
depends_onurutan 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.

Menjalankan Compose dengan podman-compose

Install podman-compose lalu jalankan di direktori yang berisi docker-compose.yml:

Menjalankan stack dengan podman-compose
podman-compose up -d
podman-compose ps
podman-compose logs -f api
podman-compose down

podman-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.

Kompatibilitas API Docker

Istilah "kompatibel" perlu dipahami dengan tepat. podman-compose membaca format file docker-compose.yml yang sama, tetapi menjalankannya melalui mekanisme Podman. Artinya:

  • Format manifest identik, sehingga file yang sama bisa dipakai di Docker dan Podman.
  • Behavior disesuaikan dengan kemampuan Podman, misalnya port forwarding rootless dan network bridge yang dikelola netavark.
  • Fitur yang spesifik Docker (misalnya beberapa plugin network tertentu) mungkin tidak tersedia dan di-skip.

Bagi sebagian besar stack — web plus database plus cache — kompatibilitas ini sudah lebih dari cukup.

Podman Desktop: GUI untuk Compose

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.

Membuka Socket Docker API

Selain podman-compose, Podman bisa berbicara sebagai Docker Engine melalui endpoint API yang kompatibel. Perintah kuncinya:

Menjalankan Docker API socket
podman system service --time=0 unix:///tmp/podman.sock

Dengan --time=0 layanan tidak pernah timeout. Sekarang DOCKER_HOST bisa diarahkan ke socket tersebut:

Mengarahkan tooling Docker ke Podman
export DOCKER_HOST=unix:///tmp/podman.sock
docker compose up -d

Important

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.

Tooling Docker-Compatible

Karena socket di atas menyajikan API yang kompatibel dengan Docker Engine, banyak tooling yang selama ini dipakai bersama Docker langsung berfungsi tanpa modifikasi:

  • docker CLIdocker ps, docker build, docker exec.
  • docker compose — orchestration dengan subcommand docker compose.
  • docker-py — library Python untuk mengotomasi container.
  • Portainer / UI sejenis — panel monitoring berbasis Docker API.

Praktik inilah yang membuat Podman dijuluki drop-in replacement untuk Docker: pada level protokol, klien tidak bisa membedakannya.

Penutup

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:

  • Compose adalah manifest, bukan engine — file docker-compose.yml bisa dijalankan oleh Docker maupun Podman.
  • podman-compose menerjemahkan, bukan meniru — container tetap dikelola Podman dan bisa diperiksa dengan podman.
  • podman system service --time=0 membuka gerbang Docker API untuk seluruh ekosistem tooling.
  • Podman Desktop memberi jalur grafis untuk mengelola stack yang sama.

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.

Belajar Podman - Compose & Orchestration | Belajar Podman