॥ श्री ॥

Containers

Software & Apps 2026-05-07

Containers on Shanios

Shanios is a first-class container platform. The following runtimes are pre-installed and ready to use:

| Runtime | Best for | Wiki | |---|---|---| | Podman | OCI containers, services, databases, Docker-compatible workflows | This page | | Distrobox | Mutable Linux envs (apt/pacman/yay) with home dir sharing | distrobox | | LXC / LXD | Full system containers with init, services, network stack | lxc-lxd | | systemd-nspawn | Lightweight full-system containers, no daemon | systemd-nspawn | | Apptainer | HPC/cluster portable containers (SIF format) | apptainer | | GPU containers | CUDA / ROCm / oneAPI compute via Distrobox or Podman | gpu-containers |

Container storage lives in dedicated Btrfs subvolumes, completely independent of the OS slots:

| Tool | Storage Location | Btrfs Subvolume | |------|-----------------|-----------------| | Podman (user) | ~/.local/share/containers/ | (in @home) | | Podman (root) | /var/lib/containers/storage/ | @containers | | Distrobox | /var/lib/containers/ | @containers | | LXD | /var/lib/lxd/ | @lxd | | LXC | /var/lib/lxc/ | @lxc | | nspawn | /var/lib/machines/ | @machines |

All subvolumes survive every OS update and atomic rollback untouched.

---

Podman (Default Runtime)

Podman is the default daemonless, rootless container runtime. Its CLI is identical to Docker's. podman.socket is socket-activated at boot. The podman-docker drop-in is pre-installed — existing docker commands work without modification.

Pods (pre-installed on both editions) provides a graphical interface for managing containers, images, volumes, and networks.

Basic Commands

# Pull and run an interactive container
podman run -it --rm ubuntu:24.04 bash

# Run a web server in the background
podman run -d --name myapp -p 8080:80 nginx

# List containers
podman ps           # running
podman ps -a        # all (including stopped)

# Logs
podman logs myapp
podman logs -f myapp

# Stop, remove
podman stop myapp
podman rm myapp

# Execute in a running container
podman exec -it myapp bash

# List images
podman images

Common Services

# PostgreSQL
podman volume create postgres-data
podman run -d \
  --name postgres \
  -e POSTGRES_PASSWORD=secret \
  -e POSTGRES_DB=mydb \
  -v postgres-data:/var/lib/postgresql/data \
  -p 127.0.0.1:5432:5432 \
  postgres:16

# Redis
podman run -d \
  --name redis \
  -p 127.0.0.1:6379:6379 \
  redis:7-alpine redis-server --appendonly yes

Podman Compose

# Run a docker-compose.yml
podman-compose up -d
podman-compose logs -f
podman-compose down

# Or via the docker drop-in
docker compose up -d

Auto-Start Containers at Login

# Generate a systemd user unit from a running container
podman generate systemd --new --name myapp > ~/.config/systemd/user/myapp.service

# Enable
systemctl --user enable --now myapp.service
systemctl --user status myapp.service

Docker Compatibility

The podman-docker package provides /usr/bin/docker as a wrapper. For tools that use the Docker API socket:

# Enable the Podman socket for Docker API compatibility
systemctl --user start podman.socket
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock

---

Buildah & Skopeo

Buildah builds OCI images without a daemon:

# Build from a Dockerfile/Containerfile
buildah bud -t myimage:latest .

# Scripted build without a Dockerfile
ctr=$(buildah from ubuntu:24.04)
buildah run $ctr -- apt-get update
buildah run $ctr -- apt-get install -y curl
buildah commit $ctr myimage:latest
buildah rm $ctr

Skopeo inspects and copies images between registries without pulling them:

# Copy between registries
skopeo copy docker://docker.io/nginx:latest docker://registry.example.com/nginx:latest

# Inspect image metadata without pulling
skopeo inspect docker://docker.io/ubuntu:24.04

# Delete a remote tag
skopeo delete docker://registry.example.com/old-image:tag

---

Storage Efficiency

Container images use content-addressed storage — layers shared between images are stored once. Btrfs zstd compression and the bees deduplication daemon apply at the block level on top of Podman's own layer sharing.

# Podman's view of disk usage
podman system df

# Btrfs compressed view
sudo compsize /var/lib/containers

# Prune unused images, containers, volumes
podman system prune -af --volumes