2019-09-02 23:19:07 +02:00
# Podman Compose
2019-03-04 10:30:14 +01:00
2021-12-09 14:59:34 +01:00
An implementation of [Compose Spec ](https://compose-spec.io/ ) with [Podman ](https://podman.io/ ) backend.
This project focus on:
2019-09-02 23:19:07 +02:00
2021-12-09 14:59:34 +01:00
* rootless
* daemon-less process model, we directly execute podman, no running daemon.
2021-12-10 00:01:45 +01:00
This project only depend on:
* `podman`
2022-01-18 16:57:37 +01:00
* [podman dnsname plugin ](https://github.com/containers/dnsname ): 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 allow containers be able to resolve each other if they are on the same CNI network.
2021-12-10 00:01:45 +01:00
* Python3
* [PyYAML ](https://pyyaml.org/ )
* [python-dotenv ](https://pypi.org/project/python-dotenv/ )
2021-12-09 14:59:34 +01:00
And it's formed as a single python file script that you can drop into your PATH and run.
## References:
* [spec.md ](https://github.com/compose-spec/compose-spec/blob/master/spec.md )
* [docker-compose compose-file-v3 ](https://docs.docker.com/compose/compose-file/compose-file-v3/ )
* [docker-compose compose-file-v2 ](https://docs.docker.com/compose/compose-file/compose-file-v2/ )
## Alternatives
As in [this article ](https://fedoramagazine.org/use-docker-compose-with-podman-to-orchestrate-containers-on-fedora/ ) 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)
2019-09-02 23:19:07 +02:00
For production-like single-machine containerized environment consider
- [k3s ](https://k3s.io ) | [k3s github ](https://github.com/rancher/k3s )
- [MiniKube ](https://minikube.sigs.k8s.io/ )
For the real thing (multi-node clusters) check any production
2021-12-09 14:59:34 +01:00
OpenShift/Kubernetes distribution like [OKD ](https://www.okd.io/ ).
## Versions
2019-09-02 23:19:07 +02:00
2021-12-18 22:34:32 +01:00
If you have legacy version of `podman` (before 3.1.0) you might need to stick with legacy `podman-compose` `0.1.x` branch.
2021-12-09 14:59:34 +01:00
The legacy branch 0.1.x uses mappings and workarounds to compensate for rootless limitations.
2019-09-02 23:19:07 +02:00
2021-12-09 14:59:34 +01:00
Modern podman versions (>=3.4) do not have those limitations and thus you can use latest and stable 1.x branch.
2019-03-04 10:30:14 +01:00
2019-08-21 22:45:53 +02:00
## Installation
Install latest stable version from PyPI:
```
2019-09-02 23:19:07 +02:00
pip3 install podman-compose
2019-08-21 22:45:53 +02:00
```
2019-09-02 23:19:07 +02:00
pass `--user` to install inside regular user home without being root.
2019-08-21 22:45:53 +02:00
Or latest development version from GitHub:
```
2019-09-02 23:19:07 +02:00
pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz
2019-08-21 22:45:53 +02:00
```
2019-03-04 10:30:14 +01:00
2019-09-02 23:19:07 +02:00
or
2019-03-04 10:30:14 +01:00
2019-09-02 23:19:07 +02:00
```
2019-09-02 23:23:08 +02:00
curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
chmod +x /usr/local/bin/podman-compose
2019-09-02 23:19:07 +02:00
```
2019-03-04 10:30:14 +01:00
2021-12-09 14:59:34 +01:00
or inside your home
2019-03-04 10:30:14 +01:00
2019-09-02 23:19:07 +02:00
```
2019-09-02 23:23:08 +02:00
curl -o ~/.local/bin/podman-compose https://raw.githubusercontent.com/containers/podman-compose/devel/podman_compose.py
chmod +x ~/.local/bin/podman-compose
2019-09-02 23:19:07 +02:00
```
2019-03-11 10:51:28 +01:00
2019-11-21 19:13:52 +01:00
or install from Fedora (starting from f31) repositories:
```
sudo dnf install podman-compose
```
2019-09-02 23:19:07 +02:00
## Basic Usage
2019-03-05 21:43:32 +01:00
2019-09-02 23:19:07 +02:00
We have included fully functional sample stacks inside `examples/` directory.
2019-03-11 10:51:28 +01:00
2019-09-02 23:19:07 +02:00
A quick example would be
2019-03-11 10:51:28 +01:00
```
2019-09-02 23:19:07 +02:00
cd examples/busybox
podman-compose --help
podman-compose up --help
podman-compose up
2019-03-11 10:51:28 +01:00
```
2019-09-02 23:19:07 +02:00
A more rich example can be found in [examples/awx3 ](examples/awx3 )
which have
2019-03-11 10:51:28 +01:00
2019-09-02 23:19:07 +02:00
- A Postgres Database
- RabbitMQ server
- MemCached server
- a django web server
- a django tasks
2019-03-11 10:51:28 +01:00
2019-03-05 21:43:32 +01:00
2021-12-24 09:21:38 +01:00
When testing the `AWX3` example, if you got errors just wait for db migrations to end.
2021-12-21 22:15:52 +01:00
There is also AWX 17.1.0
2019-03-05 21:43:32 +01:00
2019-09-02 23:19:07 +02:00
## Tests
Inside `tests/` directory we have many useless docker-compose stacks
that are meant to test as much cases as we can to make sure we are compatible