Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/seamapi/precompose
Import a Compose application into an OSTree repository
https://github.com/seamapi/precompose
compose docker-compose ostree podman
Last synced: about 2 months ago
JSON representation
Import a Compose application into an OSTree repository
- Host: GitHub
- URL: https://github.com/seamapi/precompose
- Owner: seamapi
- Archived: true
- Created: 2021-03-18T20:16:36.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-08-09T22:23:37.000Z (over 3 years ago)
- Last Synced: 2024-09-18T13:50:45.089Z (about 2 months ago)
- Topics: compose, docker-compose, ostree, podman
- Language: Python
- Homepage:
- Size: 62.5 KB
- Stars: 5
- Watchers: 5
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# precompose
`precompose` is a tool to import a [Compose](https://www.compose-spec.io/) application into an [OSTree](https://ostreedev.github.io/ostree/introduction/) repository.
Distributing container images through an OSTree repository has some advantages, compared to the use of a container registry:
- Images are deduplicated at the file level with OSTree, instead of at the layer level.
- If your host is also managed by OSTree and is based on the same OS as your containers, then images are also deduplicated at the file level against the host.
- Updates are done at the file level, instead of at the layer level - this can save significant amounts of bandwidth when only one or a few files in a layer have changed.`precompose` produces an OSTree commit which contains:
- Your original `docker-compose.yml`, rewritten to pin each image to a specific SHA
- A directory containing exploded copies of all the containers your application needs, which can be used as an [additional image store](https://www.redhat.com/sysadmin/image-stores-podman) with [Podman](https://podmain.io)## Requirements
In addition to the Python modules that it requires, `precompose` also needs some external tools to do its work:
### [Docker Compose](https://github.com/docker/compose)
While `docker-compose` can be installed from PyPI, `precompose` only uses it as an external tool, since it does not have a stable API. Because it is not used as a library, and because you may have obtained `docker-compose` from a place other than PyPI, it is not declared as a Python dependency of this module. It is used to preprocess the Compose file and interpolate any environment variables that may be present in the image name.
`docker-compose` is also needed to run an application packaged with `precompose`.
### [OSTree](https://github.com/ostreedev/ostree)
`precompose` shells out to the `ostree` command-line tool in order to create its commits.
### [Podman](https://github.com/containers/podman)
`precompose` shells out to `podman unshare` to simulate being root and to `podman pull --root` to pull container images.
Your system must be configured in a way that `podman` can operate without root privileges (aka "rootless containers") - on most Debian and Ubuntu based systems, installing the `uidmap` package along with Podman should be enough. Your mileage may vary.
`podman` is also needed to run an application packaged with `precompose`, since Docker does not have anything equivalent to an additional image store. It is strongly recommended to use version 3.0 or later of Podman; the APIs used by `docker-compose` are incomplete in earlier versions.
## Installation
Install using pip:
```bash
pip3 install precompose
```...or, grab the latest release from [GitHub](https://github.com/hello-seam/precompose/releases) or [PyPI](https://pypi.org/project/precompose/) and install it manually.
## Usage
```
precompose [-h] [--repo OSTREE] [--sign-by KEYID] [--arch ARCH] [--variant VARIANT] BRANCH COMPOSEImport a Docker Compose application into ostree
positional arguments:
BRANCH ostree branch to commit to
COMPOSE path to docker-compose.ymloptional arguments:
-h, --help show this help message and exit
--repo OSTREE ostree repo to import to
--sign-by KEYID sign commit with GPG key
--arch ARCH architecture to import
--variant VARIANT variant to import
```## Utilities
`precompose_utils` (on [GitHub](https://github.com/hello-seam/precompose_utils) and [PyPI](https://pypi.org/project/precompose-utils/)) contains a set of utilties for working with applications that have been packaged with `precompose`.