Quadlet syntax
From wikinotes
Documentation
man quadlet / podman-systemd.unit
(incl. filetypes/opts)https://man.archlinux.org/man/quadlet.5.en
Overview
# ~/.config/containers/systemd/${name}.${ext} # systemd unitfile generator files *.container: for a single container # podman run *.kube: from kubernetes yaml files using # podman kube play *.pod: for a single pod within kubernetes yaml files # ? is this correct? *.yml: a kubernetes yaml file # resources *.image: ensures a docker image is pulled *.network: create podman networks, referenced in '.container' or '.kube' files *.volume: create podman volumes, referenced in '.container' files
Standalone Containers
*.container
# ~/.config/containers/systemd/foo.container [Install] WantedBy=default.target [Container] Image=docker.io/library/mysql:5.6 Volume=foo.volume:/var/lib/mysql Environment=TZ=UTC Network=foo.network PublishPort=127.0.0.1:1234:80
Kubernetes
*.yml
A kubernetes yaml file.
# ~/.config/containers/systemd/foo.yml --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: v1 kind: Pod metadata: name: quadlet-demo spec: containers: - name: wordpress image: docker.io/library/wordpress:4.8-apache env: - name: WORDPRESS_DB_HOST value: quadlet-demo-mysql - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: mysql-root-password-kube key: password volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html # ... etc ...*.pod
Abstraction of a systemd unit file for running specific kubernetes pods only.
TODO:
is this understanding correct?
*.kube
Abstraction of a systemd unit file for running an entire kubernetes project
Resources
*.network
Define a network to share between multiple containers.
# ~/.config/containers/systemd/foo.network [Network] Subnet=192.168.30.0/24 Gateway=192.168.30.1would generate
podman-network: systmd-foo # podman network create systemd-foo systemd-unit: foo-network.service*.volume
Describe a volume to share between multiple containers.
By default:
- the volume file
${filename}.volume
is created- the podman volume is called
systemd-${filename}
- the systemd service is called
${filename}-volume.service
[Volume] # all that is required if you want to share the same volume for all containers in a service*.image
Ensure a docker image is pulled.
Generates a service that can be used as a dependency.