Building and running Docker images on builds.sr.ht works nicely with Alpine Linux VMs (example here from Drew DeVault). Tim Schumacher figured out a similar way to set it up with Arch Linux VMs (example here).
I couldn't find an example specifically for Fedora VMs, however. But with a little trial and error, it turns out what you need is pretty similar to Arch — this is what I ended up with:
# .build.yml
image: fedora/34
tasks:
- install-docker: |
curl -fsSL https://get.docker.com | sudo bash
sudo mount -t tmpfs -o size=4G /dev/null /dev/shm
until [ -e /dev/shm ]; do sleep 1; done
sudo nohup dockerd --bip 172.18.0.1/16 </dev/null >/dev/null 2>&1 &
sudo usermod -aG docker $(whoami)
until sudo docker version >/dev/null 2>&1; do sleep 1; done
- run-docker: |
cat <<EOF >Dockerfile
FROM alpine:latest
RUN apk add htop
CMD ["htop"]
EOF
docker build .
In the install-docker task, the first line installs the latest version of Docker. The second line sets up the shared-memory mount that Docker requires; and the third line waits until the mount is ready. The fourth line runs the Docker daemon as a background job; and the sixth line waits the Docker daemon is fully up and initialized.
The fifth line (the usermod command) makes the current user a member of the docker group, so the current user can run Docker commands directly (without sudo). It doesn't take effect within the install-docker task, however — so within the install-docker task, you still have to use sudo to run Docker; but in following tasks (like run-docker), it is in effect — so the example docker build . can be run without sudo.