Docker
Podman: Alternatif Docker yang Lebih Aman untuk Production
Baca juga
📚 Baca juga
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.