Podman usage

From wikinotes

podman images contain recipes for building a container.
Instructions are typically outlined in a Containerfile.

Documentation

man Containerfile https://man.archlinux.org/man/community/containers-common/Containerfile.5.en
podman commands https://docs.podman.io/en/latest/Commands.html

AutoComplete

# or anywhere else on your $fpath
sudo touch “/usr/share/zsh/site-functions/_podman”
sudo podman completion -f “/usr/share/zsh/site-functions/_podman” zsh
# you may get an error, file is still generated...

Managing Containers/Images

Image Repositories

podman search ${search}                           # search for an image
podman search ${search} --filter=is-official      # search for an official image
podman pull docker.io/mysql/mysql-server:latest   # download an image
podman pull docker.io/mediawiki:1.40-fpm          # download officially supported image

Images

podman images        # list images
podman rmi ${IMAGE}  # remove image (optionally w/ --force to kill containers)

Containerfiles

podman build . -t ${IMAGE_NAME}  # build image from 'Containerfile' in current dir as image '${IMAGE_NAME}'
podman build -f Containerfile     # specify 'Containerfile' to build

Containers

podman ps                              `# list running containers`
podman run                             `# build container form image` \
    --name ${CONTAINER_NAME}           `# podman ps` \
    -v /home/progs:/progs              `# mount /home/progs in container as /progs` \
    -p 80:8080                         `# expose container port 80 as 8080 on host` \
    -ti ${IMAGE_NAME} /bin/bash

podman start ${CONTAINER}               # run created/unstarted container
podman exec -ti ${CONTAINER} /bin/bash  # attach to started container
podman stop ${CONTAINER}                # stop a container
podman rm ${CONTAINER}                  # delete a container

Running host-system commands within a container (ex. netstat)

# find container name with `sudo podman-compose ps`, or `sudo podman ps`

CONTAINER_PID=$(sudo podman inspect '{{.State.Pid}}' ${CONTAINER_NAME})
sudo nsenter $CONTAINER_PID -n netstat -an