Podman and docker-compose

I am trying to use as mush as possible the podman command to manage my containers.
I need to run the docker-compose command to deploy a multi container application. Is there any similar option with podman?

Thank you

I think the roadmap here was to use the podman pod subcommand for docker compose like functionality. I don’t know if that’s been implmented or not or how far along it is. reference: ENH: Podman Pod commands · Issue #341 · containers/podman · GitHub

I will investigate this way.

Thank you

Also, https://github.com/containers/libpod/issues/746

If you are still interested with the latest podman version you can create pods which makes it easy to create multi container applications.

You can check this PR Replace docker-compose by podman pod and Makefile by cverna · Pull Request #49 · fedora-infra/fpdc · GitHub where I use podman and Makefile to replace docker-compose

4 Likes

Hi. I have a docker-compose.yml:

version: '3'

services:
  back:
    image: docker.io/basilrabi/back
    container_name: taiga-back
    restart: unless-stopped
    depends_on:
      - db
      - events
    networks:
      - default
    volumes:
      - ./data/media:/taiga-media
      - ./conf/back:/taiga-conf
    env_file:
      - variables.env

  front:
    image: docker.io/dockertaiga/front
    container_name: taiga-front
    restart: unless-stopped
    networks:
      - default
    volumes:
      - ./conf/front:/taiga-conf
    env_file:
      - variables.env

  db:
    image: docker.io/postgres:11-alpine
    container_name: taiga-db
    restart: unless-stopped
    networks:
      - default
    env_file:
      - variables.env
    volumes:
      - ./data/db:/var/lib/postgresql/data

  rabbit:
    image: docker.io/dockertaiga/rabbit
    container_name: taiga-rabbit
    restart: unless-stopped
    networks:
      - default
    env_file:
      - variables.env

  events:
    image: docker.io/dockertaiga/events
    container_name: taiga-events
    restart: unless-stopped
    depends_on:
      - rabbit
    networks:
      - default
    env_file:
      - variables.env

  proxy:
    image: docker.io/basilrabi/proxy
    container_name: taiga-proxy
    restart: unless-stopped
    depends_on:
      - back
      - front
      - events
    networks:
      - default
    ports:
      - 80:80
      - 443:443
    volumes:
      #- ./cert:/taiga-cert
      - ./conf/proxy:/taiga-conf
    env_file:
      - variables.env

networks:
  default:

with a variables.env:

TAIGA_HOST=192.169.101.133
TAIGA_SCHEME=http
TAIGA_BACK_HOST=back
TAIGA_FRONT_HOST=front
EVENTS_HOST=events
TAIGA_SECRET=bjmW2hU5dLHya6hiovtslHyXlAB3xYpZ3EeP6fPnDkRqxKJONOYDggLaP74lgF3s

ENABLE_SSL='no'
# CERT_NAME=fullchain.pem
# CERT_KEY=privkey.pem

POSTGRES_HOST=db
POSTGRES_DB=taiga
POSTGRES_USER=taiga
POSTGRES_PASSWORD=taiga

RABBIT_HOST=rabbit
RABBIT_USER=taiga
RABBIT_PASSWORD=password
RABBIT_VHOST=taiga

STARTUP_TIMEOUT=15s

SET_EMAIL_BACKEND=False
SET_EMAIL_USE_SSL=False
SET_EMAIL_HOST=smtp.gmail.com
SET_EMAIL_PORT=587
SERVER_EMAIL_USER=server@gmail.com
SERVER_EMAIL_PASSWORD=servermailpassword

When using docker-compose up, I can see the web site in http://192.169.101.133. I attempted to convert to podman and created the following script:

#!/bin/bash

VOL=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )

mkdir -p $VOL/conf/back
mkdir -p $VOL/conf/front
mkdir -p $VOL/conf/proxy
mkdir -p $VOL/data/db
mkdir -p $VOL/data/media

podman pod exists taiga
if [ "$?" == "0" ]; then
	podman pod rm -f taiga
fi

podman pod create --name taiga && \
podman run --name db \
	--hostname db \
	--pod taiga -dt \
	--env-file variables.env \
	-v $VOL/data/db:/var/lib/postgresql/data:z \
	--image-volume tmpfs \
	docker.io/postgres:11-alpine && \
podman run --name rabbit \
	--hostname rabbit \
	--pod taiga -dt \
	--env-file variables.env \
	docker.io/dockertaiga/rabbit && \
podman run --name front \
	--hostname front \
	--pod taiga -dt \
	--env-file variables.env \
	-v $VOL/conf/front:/taiga-conf:z \
	--image-volume tmpfs \
	docker.io/dockertaiga/front && \
podman run --name events \
	--hostname events \
	--pod taiga -dt \
	--env-file variables.env \
	docker.io/dockertaiga/events && \
podman run --name back \
	--hostname back \
	--pod taiga -dt \
	--env-file variables.env \
	-v $VOL/data/media:/taiga-media:z \
	-v $VOL/conf/back:/taiga-conf:z \
	--image-volume tmpfs \
	docker.io/basilrabi/back && \
podman run --name proxy \
	--pod taiga -dt \
	--env-file variables.env \
	-p 80:80 \
	-v $VOL/conf/proxy:/taiga-conf:z \
	--image-volume tmpfs \
	docker.io/basilrabi/proxy

However, the containers seem to fail to communicate with each other. Any advice on how to replicate the behavior of docker-compose up using podman? I’m a beginer in podman. Thank you in advance.