Mengelola siklus hidup container sebagai service systemd lanjutan: socket activation untuk layanan on-demand via unit socket, auto-update image dengan podman auto-update, generator unit Quadlet, serta strategi update dan rollback yang aman.

Di episode 16 kalian mengeraskan container dengan resource limits, rootfs read-only, dan audit. Sekarang tibalah puncak fase systemd: bagaimana membuat container berperilaku seperti service production — mulai hanya saat dibutuhkan, memperbarui diri saat image baru tersedia, dan kembali ke versi lama dalam hitungan detik. Episode 17 menyatukan Quadlet, socket activation, dan podman auto-update.
Di episode 10 kalian mengenal Quadlet: unit systemd .container, .pod, .volume, dan .image yang otomatis diterjemahkan menjadi unit systemd biasa. Keunggulannya kini terasa: unit ini bisa memanfaatkan seluruh fitur systemd, termasuk dependency, restart policy, dan socket activation yang akan kalian lihat sekarang.
Socket activation memungkinkan sebuah service baru berjalan ketika ada koneksi masuk. systemd memegang socket-nya terlebih dahulu; ketika permintaan datang, systemd me-launch container-nya. Hasilnya: container tidak menghabiskan resource saat tidak dipakai.
Cara manualnya dengan unit socket:
[Unit]
Description=Socket untuk app container
[Socket]
ListenStream=8080
SocketMode=0660
[Install]
WantedBy=sockets.targetDan di sisi Quadlet, unit .container dipasangkan dengan file .socket bernama sama. Quadlet mengenali pasangan ini dan menghubungkan keduanya secara otomatis:
[Unit]
Description=App container on-demand
[Container]
Image=quay.io/example/app:1.2
PublishPort=127.0.0.1:8080:8080
[Service]
Restart=on-failure
[Install]
WantedBy=default.targetAktifkan pasangannya:
systemctl --user daemon-reload
systemctl --user enable --now app.socket
systemctl --user status app.socketSelama tidak ada koneksi ke port 8080, container tidak berjalan — hemat memory dan CPU. Begitu ada permintaan, systemd menyalakan container dalam hitungan detik.
Salah satu tantangan operasional terbesar: memastikan container memakai image terbaru tanpa harus manual. podman auto-update menyelesaikannya. Container yang ingin di-update ditandai dengan label:
[Container]
Image=docker.io/library/nginx:1.26
Label=io.containers.autoupdate=registryLalu jalankan pembaruan:
podman auto-update --dry-run
podman auto-updatepodman auto-update --dry-run menunjukkan container mana yang image-nya memiliki versi baru tanpa mengubah apa pun; tanpa --dry-run ia menarik image baru dan me-restart container. Untuk container yang dibangun lokal, gunakan io.containers.autoupdate=local.
Important
Auto-update mengganti image yang dirujuk unit, tetapi kebijakan restart tetap di tangan unit itu. Pastikan Restart=always atau on-failure pada bagian [Service] Quadlet, dan uji --dry-run dulu di staging sebelum membiarkannya berjalan di produksi.
Menulis Quadlet dari awal bisa membosankan untuk container yang sudah berjalan. Podman menyediakan generator untuk membalik proses: dari container atau pod yang aktif menjadi file unit Quadlet:
podman systemd generate --name myapp --files
ls -la ~/.config/containers/systemd/podman systemd generate --files menulis file .container atau .pod yang siap di-copy ke direktori Quadlet. Untuk gaya unit systemd klasik, podman generate systemd tetap tersedia — tetapi Quadlet adalah arah yang direkomendasikan ke depan.
Strategi update yang aman bukan sekadar menarik image terbaru, tetapi memastikan bisa kembali:
latest di produksi; gunakan tag versi seperti 1.2.3.systemctl --user restart.| Fase | Alat | Perintah / tindakan |
|---|---|---|
| Definisi | Quadlet .container | Tulis file di direktori systemd |
| Aktivasi | systemd | systemctl --user enable --now |
| On-demand | Socket activation | systemctl --user start app.socket |
| Pembaruan | podman auto-update | podman auto-update |
| Rollback | Tag image | Ganti tag, restart unit |
| Inspeksi | systemd + Podman | systemctl --user status, podman logs |
Kombinasi alat-alat ini mengubah container dari objek yang dijalankan sekali menjadi service yang dikelola penuh oleh systemd.
Pada episode 17 ini kalian mengelola siklus hidup service lanjutan: socket activation dengan unit systemd dan pasangan Quadlet, pembaruan otomatis dengan podman auto-update, generator unit Quadlet lewat podman systemd generate, serta strategi update dan rollback berbasis tag yang aman.
Inti yang harus dibawa pulang:
--dry-run sebelum percaya pada otomasi.podman systemd generate.Di episode 18 berikutnya kita beralih dari koreografi menuju performa: performance & optimization — bagaimana layer caching dan multi-stage build mempercepat pipeline, memanfaatkan zstd:chunked partial pull, dan merawat storage dengan garbage collection serta pruning.