Skip to main content

A script to run docker-compose.yml using podman

Project description

Podman Compose

Tests

An implementation of Compose Spec with Podman backend. 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 the podman-plugins or podman-dnsname distro 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 in this article you can setup a podman.socket and use unmodified docker-compose that talks to that socket but in this case you lose the process-model (ex. docker-compose build will 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 like OKD.

Versions

If you have legacy version of podman (before 3.1.0) you might need to stick with legacy podman-compose 0.1.x branch. 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 from podman-compose version 0.1.x then we no longer have global option -t to set mapping type like hostnet. If you desire that behavior, pass it the standard way like network_mode: host in the YAML.

Installation

Pip

Install the latest stable version from PyPI:

pip3 install podman-compose

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

Or latest development version from GitHub:

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

Homebrew

brew install podman-compose

Generate binary using docker/podman locally

This script will download the repo, generate the binary using this Dockerfile, and place the binary in the directory where you called this script.

sh -c "$(curl -sSL https://raw.githubusercontent.com/containers/podman-compose/main/scripts/download_and_build_podman-compose.sh)"

Manual

curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/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.com/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 inside examples/ directory. You can get more examples from awesome-compose.

A quick example would be

cd examples/busybox
podman-compose --help
podman-compose up --help
podman-compose up

A more rich example can be found in examples/awx3 which have

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

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

Tests

Inside tests/ 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

python3 -m unittest discover tests/unit

Contributing guide

If you are a user or a developer and want to contribute please check the CONTRIBUTING section

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

podman_compose-1.3.0.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

podman_compose-1.3.0-py2.py3-none-any.whl (41.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file podman_compose-1.3.0.tar.gz.

File metadata

  • Download URL: podman_compose-1.3.0.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.12

File hashes

Hashes for podman_compose-1.3.0.tar.gz
Algorithm Hash digest
SHA256 e65a70e8fa26bd195d2017ac5893149b40c0df5a0c20d480a338c4f60218b1fa
MD5 227ed30ee113b433856267463fa251d4
BLAKE2b-256 a8e70d23c675128a53bc220c296e6abdcbda872dd1fef48d4513f351f4031d24

See more details on using hashes here.

File details

Details for the file podman_compose-1.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for podman_compose-1.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 34599a9fd404bb80b587d5dda316d83928d7a33917e8a0adcd07f7aa6c52da4b
MD5 5c8561988fc79982dd78510ce3489866
BLAKE2b-256 e35341ec4fcb57fe32a02c7616a2b4e05343ed4c0daaa76b1e04a2a0ccb5c7e6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page