D11.5 Podman Compose 🐙
podman-compose
Το podman-compose είναι drop-in replacement του docker compose για Podman:
# Εγκατάσταση
pip install podman-compose
# ή: dnf install podman-compose
# Χρήση (ίδια syntax με docker compose!)
podman-compose up -d
podman-compose down
podman-compose ps
podman-compose logs -f app
Ansible + podman-compose
tasks:
# ── Install podman-compose ────────────────
- name: Install podman-compose
ansible.builtin.pip:
name: podman-compose
state: present
extra_args: --user
become: false
become_user: "{{ podman_user }}"
# ── Deploy compose stack ──────────────────
- name: Compose file
ansible.builtin.template:
src: templates/compose.yml.j2
dest: "/home/{{ podman_user }}/myapp/compose.yml"
owner: "{{ podman_user }}"
mode: '0640'
no_log: true
- name: "🚀 podman-compose up"
ansible.builtin.command:
cmd: podman-compose up -d --remove-orphans
chdir: "/home/{{ podman_user }}/myapp"
become: false
become_user: "{{ podman_user }}"
environment:
XDG_RUNTIME_DIR: "/run/user/{{ podman_uid }}"
changed_when: true
compose.yml — Podman compatible
# compose.yml (ίδιο format με docker compose!)
---
services:
nginx:
image: nginx:1.25-alpine
restart: always
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro,Z
networks:
- frontend
app:
image: "myapp:{{ app_version }}"
restart: always
networks:
- frontend
- backend
environment:
NODE_ENV: production
postgres:
image: postgres:15-alpine
restart: always
networks:
- backend
volumes:
- postgres_data:/var/lib/postgresql/data:Z
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/pg_pass
secrets:
- pg_pass
networks:
frontend: {}
backend:
internal: true
volumes:
postgres_data: {}
secrets:
pg_pass:
file: ./secrets/pg_password # ← file-based secret
Podman play kube (Kubernetes YAML)
tasks:
# Podman μπορεί να εκτελέσει Kubernetes manifests!
- name: "▶️ Run Kubernetes pod"
ansible.builtin.command:
cmd: podman play kube myapp-pod.yaml
become: false
changed_when: true
# Δημιουργία Kubernetes YAML από running container
- name: Generate kube manifest
ansible.builtin.command:
cmd: podman generate kube myapp > myapp-pod.yaml
changed_when: true
become: false
Σύνοψη D11.5
Podman Compose
│
├── podman-compose: drop-in για docker compose
├── Ίδιο compose.yml format
├── Rootless: become_user + XDG_RUNTIME_DIR
├── Secrets: file-based (./secrets/name)
└── Bonus: podman play kube → Kubernetes YAML!