a script to run docker-compose.yml using podman
Go to file
Monika Kairaityte 360b85bf2d Allow providing custom in_pod argument as a global compose file variable
Default command line argument `in_pod` was set to True, but this breaks
the compose file for users who want to use `--userns` argument. This
commit sets default `in_pod` value to None, and later resolves whether
to create a pod by checking compose file, as new argument in compose
file x-podman is now available. Now it is convenient for users to pass
custom `in_pod` value (True or False) as a compose file argument when
command line value of `in_pod` is not provided.

Signed-off-by: Monika Kairaityte <monika@kibit.lt>
2024-06-20 09:42:22 +03:00
.github github: Add verbose option to integration tests 2024-06-08 20:05:12 +03:00
completion/bash Add --remove-orphans on down command 2023-04-09 11:35:46 +03:00
docs Allow providing custom in_pod argument as a global compose file variable 2024-06-20 09:42:22 +03:00
examples Add support for enabling GPU access 2024-05-07 10:32:24 +08:00
pytests pytests: Add test for object required but path non existent 2024-05-29 00:09:22 +03:00
scripts update readme and no arguments print help 2019-09-03 00:19:07 +03:00
tests Allow providing custom in_pod argument as a global compose file variable 2024-06-20 09:42:22 +03:00
.codespellignore github/workflows: Add codespellignore file to address false positives 2024-05-28 20:20:33 +03:00
.codespellrc Don't spellcheck requirementfiles 2024-03-09 22:26:36 +01:00
.coveragerc Fix a couple issues and update docs 2024-02-04 10:11:57 +03:00
.editorconfig add editorconfig 2024-03-09 22:26:32 +01:00
.gitignore Add support for enabling GPU access 2024-05-07 10:32:24 +08:00
.pre-commit-config.yaml Add pre-commit definition for codespell 2024-03-08 18:41:03 -05:00
.pylintrc reformat 2022-06-21 21:54:44 +03:00
CODE-OF-CONDUCT.md Add Code of Conduct 2020-02-09 01:23:49 +02:00
CONTRIBUTING.md Formats CONTRIBUTING.md 2024-03-17 19:31:47 +01:00
LICENSE Initial commit 2019-03-04 10:52:30 +02:00
podman_compose.py Allow providing custom in_pod argument as a global compose file variable 2024-06-20 09:42:22 +03:00
pyproject.toml Replace flake8, black, pylint with ruff 2024-03-07 18:28:05 +02:00
README.md Add instructions on install from Homebrew 2024-05-04 17:50:06 +03:00
requirements.txt FIXES #370: bug-for-bug hanlding of .env 2021-12-10 01:01:45 +02:00
SECURITY.md Add Security Policy 2020-05-09 17:54:44 -04:00
setup.cfg Fixes #661 - Fixes linting/flake8 errors 2023-04-10 11:53:47 +03:00
setup.py Fixes invalid name of test package in setup.py 2024-03-17 19:31:47 +01:00
test-requirements.txt Enable pylint, because it catches stuff that ruff misses 2024-03-09 22:26:35 +01:00

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

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

python -m unittest pytests/*.py

Contributing guide

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