Skip to content

containers/podman-compose

Podman Compose

Tests

An implementation ofCompose SpecwithPodmanbackend. This project focuses on:

  • rootless
  • daemon-less process model, we directly execute podman, no running daemon.

This project only depends on:

  • podman
  • podman dnsname plugin:It is usually found in thepodman-pluginsorpodman-dnsnamedistro packages, those packages are not pulled by default and you need to install them. This allows containers to be able to resolve each other if they are on the same CNI network. This is not necessary when podman is using netavark as a network backend.
  • Python3
  • PyYAML
  • Python -dotenv

And it's formed as a single Python file script that you can drop into your PATH and run.

References:

Alternatives

As inthis articleyou can setup apodman.socketand use unmodifieddocker-composethat talks to that socket but in this case you lose the process-model (ex.docker-compose buildwill send a possibly large context tarball to the daemon)

For production-like single-machine containerized environment consider

For the real thing (multi-node clusters) check any production OpenShift/Kubernetes distribution likeOKD.

Versions

If you have legacy version ofpodman(before 3.1.0) you might need to stick with legacypodman-compose0.1.xbranch. The legacy branch 0.1.x uses mappings and workarounds to compensate for rootless limitations.

Modern podman versions (>=3.4) do not have those limitations, and thus you can use latest and stable 1.x branch.

If you are upgrading frompodman-composeversion0.1.xthen we no longer have global option-tto set mapping type likehostnet.If you desire that behavior, pass it the standard way likenetwork_mode: hostin the YAML.

Installation

Pip

Install the latest stable version from PyPI:

pip3 install podman-compose

pass--userto install inside regular user home without being root.

Or latest development version from GitHub:

pip3 install https://github /containers/podman-compose/archive/main.tar.gz

Homebrew

brew install podman-compose

Manual

curl -o /usr/local/bin/podman-compose https://raw.githubusercontent /containers/podman-compose/main/podman_compose.py
chmod +x /usr/local/bin/podman-compose

or inside your home

curl -o~/.local/bin/podman-compose https://raw.githubusercontent /containers/podman-compose/main/podman_compose.py
chmod +x~/.local/bin/podman-compose

or install from Fedora (starting from f31) repositories:

sudo dnf install podman-compose

Basic Usage

We have included fully functional sample stacks insideexamples/directory. You can get more examples fromawesome-compose.

A quick example would be

cdexamples/busybox
podman-compose --help
podman-compose up --help
podman-compose up

A more rich example can be found inexamples/awx3 which have

  • A Postgres Database
  • RabbitMQ server
  • MemCached server
  • a django web server
  • a django tasks

When testing theAWX3example, if you got errors, just wait for db migrations to end. There is also AWX 17.1.0

Tests

Insidetests/directory we have many useless docker-compose stacks that are meant to test as many cases as we can to make sure we are compatible

Unit tests with unittest

run a unittest with following command

Python 3 -m unittest discover tests/unit

Contributing guide

If you are a user or a developer and want to contribute please check theCONTRIBUTINGsection