Docker

Podman: Alternatif Docker yang Lebih Aman untuk Production

Podman: Alternatif Docker yang Lebih Aman untuk Production
Podman (Pod Manager) adalah container engine dari Red Hat yang dirancang sebagai pengganti Docker. Perbedaan utamanya: Podman tidak membutuhkan daemon berjalan di background (daemonless), bisa berjalan tanpa root (rootless), dan setiap container berjalan sebagai process terpisah (bukan child dari daemon seperti Docker). ## Mengapa Podman? **Rootless by Default.** Container dijalankan oleh user biasa, bukan root. Jika container compromised, attacker hanya mendapat akses user biasa, bukan root di host. **No Daemon.** Docker membutuhkan `dockerd` yang berjalan sebagai root. Jika daemon crash, semua container mati. Podman tidak punya single point of failure ini. **OCI Compatible.** Podman bisa pull dan menjalankan image Docker Hub tanpa modifikasi. Dockerfiles tetap bisa dipakai. **Systemd Integration.** Podman berjalan natural dengan systemd — container bisa dijalankan sebagai systemd service. **Pod Support.** Seperti Kubernetes, Podman mendukung konsep "pod" — group containers yang share network namespace. ## Install Podman ### Ubuntu/Debian ```bash apt update && apt install -y podman ``` ### Fedora/CentOS ```bash dnf install -y podman ``` ### Verifikasi ```bash podman --version podman info ``` ## Docker vs Podman Commands | Docker | Podman | Keterangan | |--------|--------|------------| | `docker run` | `podman run` | Sama | | `docker ps` | `podman ps` | Sama | | `docker build` | `podman build` | Sama | | `docker-compose` | `podman-compose` | Perlu install | | `docker compose` | `podman compose` | Podman 4.1+ | | `docker pull` | `podman pull` | Sama | | `docker exec` | `podman exec` | Sama | ## Migrasi dari Docker ### 1. Alias (Quick Fix) ```bash # Tambahkan ke ~/.bashrc alias docker=podman alias docker-compose=podman-compose ``` ### 2. Docker Socket Compatibility Jika aplikasi kamu membutuhkan Docker socket (seperti Portainer), Podman bisa menyediakannya: ```bash # Start podman socket systemctl --user enable --now podman.socket # Socket path echo $XDG_RUNTIME_DIR/podman/podman.sock ``` ### 3. Menggunakan docker-compose dengan Podman ```bash pip install podman-compose podman-compose up -d ``` ## Rootless Container ### Konfigurasi User Namespaces ```bash # Check subuid/subgid cat /etc/subuid cat /etc/subgid # Format: username:uid_start:uid_count # Contoh: echo "username:100000:65536" >> /etc/subuid echo "username:100000:65536" >> /etc/subgid ``` ### Jalankan Container Rootless ```bash podman run -d --name web -p 8080:80 nginx:alpine ``` Container berjalan sebagai user biasa. Tidak ada root access yang dibutuhkan. ## Systemd Integration ### Generate Systemd Service ```bash # Generate service file dari container podman generate systemd --new --files --name web # Pindahkan ke systemd directory cp container-web.service ~/.config/systemd/user/ # Enable dan start systemctl --user enable --now container-web.service ``` ### Contoh Manual Service ```ini # ~/.config/systemd/user/podman-web.service [Unit] Description=Web Application After=network.target [Service] Type=simple ExecStart=/usr/bin/podman run -d -p 3000:3000 myapp:latest ExecStop=/usr/bin/podman stop myapp Restart=always [Install] WantedBy=default.target ``` ```bash systemctl --user enable --now podman-web.service systemctl --user status podman-web.service ``` ## Podman Pods ### Konsep Pod Pod adalah group containers yang share network namespace. Mirip Kubernetes pod. ```bash # Buat pod podman pod create --name myapp -p 8080:80 -p 3000:3000 # Jalankan containers dalam pod podman run -d --pod myapp --name web nginx:alpine podman run -d --pod myapp --name api myapp-api:latest ``` Kedua container bisa akses satu sama lain melalui `localhost`. ## Buildah — Build Images tanpa Daemon Buildah adalah tool companion untuk Podman yang bisa build images tanpa daemon: ```bash # Build dari Dockerfile buildah bud -t myapp:latest . # Build dari container buildah from nginx:alpine buildah run apt-get update buildah commit my-nginx:latest # Push ke registry buildah push my-nginx:latest docker.io/myuser/my-nginx:latest ``` ## Skopeo — Manage Images tanpa Pull Skopeo bisa inspect, copy, dan delete images tanpa harus pull ke local: ```bash # Inspect image skopeo inspect docker://docker.io/library/nginx:alpine # Copy image ke registry lain skopeo copy docker://docker.io/library/nginx:alpine docker://registry.local/nginx:alpine # Delete image dari registry skopeo delete docker://registry.local/old-image:latest ``` ## Podman Desktop Red Hat merilis **Podman Desktop** — GUI untuk mengelola containers di macOS, Windows, dan Linux. Fitur: - Container management (start, stop, delete) - Image management (build, pull, push) - Volume management - Kubernetes integration - VS Code extension Download di podman-desktop.io. ## Podman di Production **Security Hardening:** ```bash # Disable privileged containers podman run --security-opt=no-new-privileges myapp # Read-only root filesystem podman run --read-only myapp # Drop all capabilities, add only needed ones podman run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp ``` **Resource Limits:** ```bash # Memory limit podman run --memory=512m --memory-swap=1g myapp # CPU limit podman run --cpus=2.0 myapp # Storage limit podman run --storage-opt=size=10G myapp ``` Podman bukan sekedar alternatif Docker — ini adalah evolusi container runtime yang lebih aman dan modern. Untuk production environment yang membutuhkan security dan compliance tinggi, Podman adalah pilihan yang tepat.