Back in 2014 when I was learning about Docker I got around to making a base image for Arch Linux. It was a really fun exploration and I got to know a lot more about how Docker worked from it. I'd highly suggest trying to make your own sometime!
Docker has matured a lot since, and I've enjoyed following it. I took some time this last week to revisit my Arch Linux image and ensure it's still functional. I wasn't surprised when the scripts continued to work just fine, even after two years.
With nothing broken, I knew I only had one choice. I had to improve it!
Want to get started? See it on the hub here, Github here, or pull it down with
docker run --tty --interactive --rm hoverbear/archlinux /bin/bashand play around.
I spent most of my time working on having the Travis-CI service be able to build and deploy new versions in an automated fashion. This was primarily, for me, a trust thing. I don't feel comfortable running containers I haven't seen the build process for, and you shouldn't either.
While the Docker Hub has "Automated" builds there doesn't seem to be much of a solution for having trusted base images, only images built via a
Dockerfile. Perhaps there is a way to scheme and subvert this via the
scratch image but I did not find this avenue enjoyable.
Thankfully, Travis did this job stellarly after a few hiccups. The biggest problem was that Travis runs a version of Ubuntu LTS and the normal Arch install process assumes it's happening on a relatively recent Linux, if not Arch itself.
I got around this problem in a slightly dirty way and pinned recent versions of the necessary packages, then upgraded the host into a (slightly terrifying) abomination. I'd like to find a cleaner way of doing this, possibly from inside of a
docker container like in the
What's a good blog post without some fun examples?
Spawning 10 Arch containers in parallel and having them all pipe to the same file:
for; do ( &); done
A few seconds later:
Making an image to build your favorite Rust project:
FROM hoverbear/archlinux MAINTAINER Ana Hobden <email@example.com> # It's always a good idea to update Arch, then install deps. RUN pacman -Syu RUN pacman -S git file awk gcc --noconfirm # Install Multirust RUN git clone --recursive https://github.com/brson/multirust WORKDIR multirust RUN git submodule update --init RUN ./build.sh RUN ./install.sh RUN multirust default "nightly" # /source - Should mount the user code. VOLUME [ "/source" ] # Change the Workdir to /source WORKDIR /source
Running it inside your favorite project folder:
You can even get this image here if you'd like!
I hope you have a great time using this image and please let me know if there is any way I can make it better!