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- a podman network backend with DNS name resolution available. This allows containers to be able to resolve each other if they are on the same network.
- either: podman dnsname plugin with CNI network backend: It is usually found in the
podman-pluginsorpodman-dnsnamedistro packages, those packages are not pulled by default and you need to install them. - or: netavark/aardvark-dns: Both are usually installed on new installations of podman 4.
- either: podman dnsname plugin with CNI network backend: It is usually found in the
- Python 3.9 or newer
- PyYAML
- python-dotenv
And it's formed as a single Python file script that you can drop into your PATH and run.
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.
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.
Install the latest stable version from PyPI:
pip3 install podman-composepass --user to install inside a regular user's home without being root.
Or latest development version from GitHub:
pip3 install https://github.com/containers/podman-compose/archive/main.tar.gzpodman-compose is available from the following package repositories:
Debian:
sudo apt install podman-composeFedora (starting from f31) repositories:
sudo dnf install podman-composeHomebrew:
brew install podman-composeThis 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)"curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/main/podman_compose.py
chmod +x /usr/local/bin/podman-composeor 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-composepodman-compose is tested via unit and integration tests.
Unit tests can be run via the following:
python3 -m unittest discover tests/unitIntegration tests can be run via the following:
python3 -m unittest discover tests/integrationIf you are a user or a developer and want to contribute please check the CONTRIBUTING section