Skip to main content

a Podman interface for container management

Project description

Podman Spawner — a Podman interface for container management

podman-spawner automates the creation and lifecycle management of Podman containers, easing the creation of temporary podman images.

It was originally developed to review students projects, enabling to create containers on the fly for each student group and submission version.

Table of contents


Prerequisites

pod is a thin wrapper around Podman (a rootless Docker alternative). Install it before anything else:

sudo apt install podman containers-storage

containers-storage is not strictly required, but it switches the storage driver from vfs to overlay, which makes image builds significantly faster. Verify it worked:

podman info | grep graphDriverName   # should print: overlay

To pull images from Docker Hub, register it as an unqualified search registry:

mkdir -p ~/.config/containers/
echo 'unqualified-search-registries = ["docker.io"]' >> ~/.config/containers/registries.conf

For a small Podman introduction, see podman-intro.md.


Using pod

Installation

Install uv if you do not have it already:

curl -LsSf https://astral.sh/uv/install.sh | sh

Then, from the root of the pod repository:

uv tool install -e .

The pod command is now available for the current user.

Configuration

Every pod command reads config.toml from the current working directory. A default file is created by pod init (see below); its keys are:

Key Default Description
prefix POD Prefix prepended to every container name.
port 2026 Guest port exposed by the container.
user tester Username created inside the container at build time.

Workflow overview

pod init        # create the pod-build/ scaffold
  ↓ (edit Dockerfile, home-dir/, on_build.bash as needed)
pod build       # build the Podman image
pod test        # smoke-test the image interactively
  ↓
pod go <name>   # open a container for a group / version

Commands

pod init

Creates a pod-build/ directory in the current directory (or uses the current directory itself if it is already named pod-build), populated with a default Dockerfile, config.toml, on_build.bash, and home-dir/.

pod init                      # create pod-build/ (fails if it already exists)
pod init --force              # overwrite an existing pod-build/
pod init --update Dockerfile  # refresh only one file, keeping local changes

pod build

Builds the Podman image from the pod-build/ directory. Must be run from inside pod-build/ (or a directory that contains it).

pod build

The image is tagged <prefix>:latest (lower-cased), e.g. pod:latest.

pod test

Starts the dedicated test container (<prefix>-test-0.0) and attaches to it interactively. Use this to verify that a freshly built image behaves correctly before deploying it to students. The container is created if it does not exist.

pod test

pod go <name>

Attaches to a container, creating or restarting it as needed.

pod go GROUP-1.0

The host port is derived deterministically from the container name, so the same container always gets the same port across restarts.

pod list

Lists all containers belonging to this project (filtered by prefix).

pod list

pod info <name>

Prints the state and port-forwarding details of a container.

pod info GROUP-1.0

pod rm <name>

Removes a container permanently.

pod rm GROUP-1.0           # fails if the container is still running
pod rm GROUP-1.0 --force   # stops and removes unconditionally

Note: due to a limitation in python-fire, --force must come after the container name.

pod purge <regex>

Removes all containers whose full name matches regex (matched with re.fullmatch, i.e. the pattern must cover the entire name including the prefix).

pod purge 'POD-GROUP-1.*'           # remove all versions for GROUP-1
pod purge 'POD-GROUP-1.*' --force   # also remove running containers

pod purge-all

Removes every container belonging to this project, including the test container.

pod purge-all
pod purge-all --force

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

podman_spawner-0.2.0.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

podman_spawner-0.2.0-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file podman_spawner-0.2.0.tar.gz.

File metadata

  • Download URL: podman_spawner-0.2.0.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for podman_spawner-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bd213989c102168b925c13c217f38fa1710ff014c6e58a669b181e52f97b7d8b
MD5 828ef89b3f64a5a73107612c6a337199
BLAKE2b-256 600db6145afd26a07ba4f01c23a39ab1338fd6141436f909b254bbe7e88f5f4d

See more details on using hashes here.

File details

Details for the file podman_spawner-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: podman_spawner-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for podman_spawner-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e47779ff37513cae07a4f9ffe33e643b464afeb81a6c155e09b4f49d742fdc64
MD5 b28bde95680cf01646c41f9836a6a966
BLAKE2b-256 d01980e6978c6435dc12b534832cc91f9775eb7178a44753d9f14d43d67c47d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page