sdme
Lightweight systemd-nspawn container manager with overlayfs. A single static binary that creates and manages Linux containers -- each boots full systemd over a copy-on-write layer, keeping the base rootfs untouched. No daemon, no runtime dependency beyond systemd.
What you can do
1. Clone your machine for experimentation
Create an overlayfs clone of your running system, boot systemd inside it, and land in your own shell with your $HOME and configs. Install packages, change configs, break things -- the host is untouched.
When you are done, manage containers with:
2. Import a root filesystem from virtually any source
Import from OCI registries, local directories, tarballs, URLs, or QCOW2 cloud images. Each imported rootfs is a reusable template -- spin up as many containers as you want from it. Supported distros: Debian, Ubuntu, Fedora, CentOS, AlmaLinux, Arch Linux, CachyOS, openSUSE, and NixOS.
# Create containers from imported rootfs
See docs/usage.md for the full list of import sources.
3. Import OCI applications into your nspawn container
Any OCI image (nginx, redis, postgresql, anything on Docker Hub or any registry) runs as a systemd service inside a booted container. No Docker or Podman required.
Inside the container, the app is a managed systemd service. From outside, use
sdme logs and sdme exec:
See OCI integration for the full story.
4. Run a Kubernetes pod in your nspawn container
Run Kubernetes Pod YAML directly as nspawn containers. Multi-container pods, shared volumes, init containers, secrets, and configmaps are all supported.
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: nginx
image: docker.io/nginx:latest
ports:
- containerPort: 80
- name: redis
image: docker.io/redis:latest
- name: mysql
image: docker.io/mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: secret
See Kubernetes pod support for the full spec.
Further reading
- docs/usage.md: install, lifecycle, rootfs management, networking, OCI, pods, security, builds
- docs/architecture.md: internals, design, OCI bridging, Kubernetes mapping