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.
This project only depend on `podman` and Python3 and [PyYAML ](https://pyyaml.org/ ).
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-09 14:59:34 +01:00
If you have legacy version of `podman` (before 3.x) 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.
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
2019-09-02 23:19:07 +02:00
When testing the `AWX3` example, if you got errors just wait for db migrations to end.
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