Starting Docker on Void Linux

A simple guide to installing, configuring, and using Docker.

Fundamental Concepts

What is Docker?

Docker lets you package and run applications inside lightweight, isolated containers. Containers share the host's Linux kernel, making them generally faster and lighter than virtual machines.

Key Components

  • Docker Engine: Runs and manages containers.
  • Docker CLI: The docker command.
  • Images: Templates used to create containers.
  • Containers: Running instances of images.
  • Registry: Stores and distributes images.
  • Compose: Manages multi-container applications.

Installation

Update Your System

sudo xbps-install -Su

Install Docker

Docker is available directly from the official Void Linux repositories.

sudo xbps-install -S docker

Install Docker Compose

sudo xbps-install -S docker-compose
docker compose version

Start Docker

Void Linux uses runit for service management. Enable Docker by creating a symbolic link to its service directory:

sudo ln -s /etc/sv/docker /var/service/

After that, reboot and check that Docker is running:

sudo sv status docker

Verify the Installation

docker version
sudo docker run hello-world

Use Docker Without sudo

sudo usermod -aG docker "$USER"

Log out and back in before using Docker without sudo.

Security: Membership in the docker group effectively gives root-level control over the host.

Using Docker

Run a Container

docker run -d --name web -p 8080:80 nginx

This runs Nginx in the background and maps port 8080 on the host to port 80.

List Containers

sudo docker ps
sudo docker ps -a

Stop and Remove Containers

sudo docker stop <container>
sudo docker rm <container>
sudo docker rm -f <container>

Manage Images

sudo docker images
sudo docker pull nginx
sudo docker rmi <image>

Clean Up

sudo docker system df
sudo docker system prune

Be careful with cleanup commands because unused resources may still be needed.

Docker Compose

Compose is useful for applications that require multiple containers, such as a web server and database.

Example compose.yaml

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Compose Commands

sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs
sudo docker compose down

Modern Compose files do not require a top-level version field.

Best Practices

Images

  • Use official or trusted images.
  • Pin versions when reproducibility matters.
  • Keep images small.
  • Update images regularly.

Security

  • Avoid --privileged unless necessary.
  • Don't expose unnecessary ports.
  • Avoid unnecessary host mounts.
  • Never put secrets inside Dockerfiles or images.
  • Keep Docker and the host updated.

Resource Limits

Containers share the host's CPU and memory. Limits can be applied when needed:

sudo docker run -d --memory=512m nginx
sudo docker run -d --cpus=1 nginx

References