Nicola Sella and Jan Rodák
Nicola Sella
Senior Software Engineer
Jan Rodák
Software Engineer
README.md
~/.config/containers/systemdpodman quadlet installpodman quadlet listpodman quadlet printpodman quadlet rm.service filessystemctl --user statussystemctl --user startsystemctl --user restartsystemctl --user stopsystemctl --user enable --now
systemctl --user disable --now
systemctl --user catSource: your .container quadlet
# ~/.config/containers/systemd/minimal.container
[Container]
Image=quay.io/demo_quadlets/alpine:latest
Generated: systemd unit (do not edit by hand)
# /run/user/1000/systemd/generator/minimal.service
# Automatically generated by /usr/lib/systemd/user-generators/podman-user-generator
#
[X-Container]
Image=quay.io/demo_quadlets/alpine:latest
[Unit]
Wants=podman-user-wait-network-online.service
After=podman-user-wait-network-online.service
SourcePath=/home/nsella/.config/containers/systemd/minimal.container
RequiresMountsFor=%t/containers
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
KillMode=mixed
ExecStop=/usr/bin/podman rm -v -f -i systemd-%N
ExecStopPost=-/usr/bin/podman rm -v -f -i systemd-%N
Delegate=yes
Type=notify
NotifyAccess=all
SyslogIdentifier=%N
ExecStart=/usr/bin/podman run --name systemd-%N --replace --rm --cgroups=split --sdnotify=conmon -d quay.io/demo_quadlets/alpine:latest
What systemd actually runs
(ExecStart
from the generated service)
/usr/bin/podman run \
--name systemd-%N \
--replace --rm \
--cgroups=split \
--sdnotify=conmon \
-d quay.io/demo_quadlets/alpine:latest
Container unit fileDefines a single long-running container; maps to
podman run.
podman run alpine:latest
[Container]
Image=alpine:latest
mycontainer.container → mycontainer.service
Pod unit fileCreates a pod (shared network/IPC); containers join it with
Pod=….
podman pod create
[Pod]
mypod.pod → mypod.service
Kube unit fileApplies a Kubernetes manifest (Pod, Deployment, etc.) in one shot
instead
of many .container files.
podman kube play myawesomekubefile.yaml
[Kube]
Yaml=myawesomekubefile.yaml
mykube.kube → mykube.service
Network unit fileProvisions a named network; containers reference it with
Network=….
podman network create mynetwork
[Network]
mynetwork.network → mynetwork-network.service
Volume unit fileDeclares persistent disk; mount in containers with
Volume=myvolume.volume:/path.
podman volume create myvolume
[Volume]
myvolume.volume → myvolume-volume.service
Build unit fileBuilds an image from a Containerfile next to the unit; other units can then run that tag.
podman build --tag localhost/imagename .
[Build]
ImageTag=localhost/imagename
SetWorkingDirectory=unit
myimage.build → myimage-build.service
Image unit filePull-only service; containers use Image=myimage.image so
start does not wait on the registry.
podman pull quay.io/centos/centos:latest
[Image]
Image=quay.io/centos/centos:latest
myimage.image → myimage-image.service
Artifact unit fileFetches OCI artifacts (models, bundles) for use with newer Podman features—not a runnable image by itself.
podman artifact pull quay.io/foobar/artifact:special
[Artifact]
Artifact=quay.io/foobar/artifact:special
myartifact.artifact → myartifact-artifact.service
00_minimal
01_wordpress
.volume files02_compose
03_kube
.kube quadletpodlet04_python
XDG_RUNTIME_DIR
05_curl
| Code | github.com/containers/podman |
| Chat (dev) | #podman-dev:matrix.org |
| Chat (general) | #podman:fedoraproject.org |
| Calendar | zoom-lfx.platform.linuxfoundation.org |
| Office Hours | Mon 16:00–16:30 CET | Thu 17:00–17:30 CET |
| Community | 1st Tue/Even month (Feb, Apr, June,...) 17:00–18:00 CET |
References