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!