Artix can run VMs and containers without systemd. This episode covers QEMU/libvirt with virt-manager and KVM, Docker in non-systemd mode, Podman for rootless containers, and enabling services on your chosen init.

VMs and containers are the foundation of modern computing, and Artix runs them well without systemd. Episode 19 covers two worlds at once: virtualization with QEMU/libvirt and KVM, and containers with Docker and Podman — including the increasingly popular rootless mode.
On Artix, it all comes back to the same pattern: install the service subpackage, register it in your init, start the service. After episodes 12 and 13, you're already skilled at this pattern; now it's just applying it to virtual infrastructure.
Libvirt is an API for managing virtualization, QEMU is the emulator, and virt-manager provides a GUI. Install them all along with services:
sudo pacman -S qemu-desktop libvirt virt-manager dnsmasqqemu-desktop includes a complete emulator with KVM support. dnsmasq is needed by libvirt for the NAT virtual network.
Enable the libvirt daemon per your init:
rc-update add libvirtd default
rc-service libvirtd startTo use KVM, make sure your user is in the libvirt group and reload its membership:
sudo usermod -aG libvirt devnull
newgrp libvirtusermod -aG libvirt devnull grants permission to manage VMs via libvirt. A new terminal session is needed for the group membership to take effect.
Launch virt-manager to manage VMs graphically:
virt-managerInside virt-manager, create a new VM pointing to the Artix ISO. Choose the KVM emulator to use hardware acceleration. Verify KVM support on the system:
ls /dev/kvm
virsh list --allThe output of ls /dev/kvm shows hardware acceleration is available. virsh list --all shows the VMs registered with libvirt.
Docker works normally without systemd on Artix; its daemon runs through your init like any other service:
sudo pacman -S docker docker-openrc docker-compose
rc-update add docker default
rc-service docker startdocker-openrc provides the init script for the daemon. Add your user to the docker group so you can run commands without sudo:
sudo usermod -aG docker devnull
newgrp docker
docker run --rm hello-worldThe output of docker run --rm hello-world downloads a test image and runs it. If it prints a welcome message, your Docker daemon is healthy.
Podman is a Docker alternative that needs no central daemon and supports rootless containers natively — containers run as a regular user without root privileges. This is a big security win on shared servers.
Install Podman on Artix:
sudo pacman -S podman podman-composePodman doesn't always need a daemon service. For full rootless mode, make sure elogind is running — Podman uses it for user sessions.
Run a container as a regular user:
podman pull docker.io/library/nginx
podman run -d -p 8080:80 --name web nginx
podman pspodman run -d runs a container in the background. podman ps lists active containers. Because it's rootless, all operations run with your user's permissions.
Podman is designed to be Docker-compatible. Most commands can be switched directly from docker to podman. For scripts that call docker, an alias or symlink can be used:
alias docker=podmanalias docker=podman lets old scripts run without modification. Note: the Docker client talks to a daemon, whereas Podman runs containers directly — for most workflows the difference is imperceptible.
Containers that must always run can be managed as init services. With Docker, use a restart policy; with Podman, use a systemd unit or an init script following Artix's patterns. For OpenRC, a container runs via a script that calls the container command:
#!/sbin/openrc-run
description="Web container"
start() {
ebegin "Starting web container"
podman start web
eend $?
}Save the script in /etc/init.d/, then register it with rc-update. This pattern keeps containers alive following the system boot.
Episode 19 took you into virtual infrastructure: QEMU/libvirt with virt-manager and KVM, Docker running normally without systemd, and rootless Podman that's more secure and flexible.
Key takeaways:
ls /dev/kvm.docker service in your init.In the next episode, episode 20, we'll cover performance and tuning — sysctl kernel params, I/O schedulers, makepkg optimization with CFLAGS, and monitoring with htop, btop, and sysstat.