Common Lisp Docker Images

Tagged as blog, common-lisp, cl-docker-images

Written on 2021-01-24 13:00:00

As alluded to in my previous post, I've been working on a set of Docker images for Common Lisp. The latest version of that effort is now finally live! Check it out at https://common-lisp.net/project/cl-docker-images/. Many thanks are also due to the Common Lisp Foundation for hosting the images on their Docker Hub org!

I've been building Docker images for Common Lisp going on five years now. They were originally hosted on my personal account (daewok) on both Github and Docker Hub. If you use the daewok images, please migrate over to these new ones at your earliest convenience. I plan to stop updating the daewok images later this year.

My original images were... not super good. The images were too big, used the entrypoint incorrectly, had out of date pieces, etc. But over the years I finally grokked Docker best practices and (IMO) they are now a set of high quality images.

I use them regularly for CI/CD purposes. They work very well with Gitlab CI and I also use them locally to make repeatable builds of CL software. I also know that they're in use by others in the community (largely for CI from what I can tell).

There are several other CL related Docker images out there. But, as far as I can tell, none of them are updated as regularly as these, support as many implementations, nor run on as many CPU architectures.

As part of this project, there are currently two classes of images published: "implementation specific" and "development".

The "implementation specific" images are meant to include only a single CL implementation. The default variant for these images is "fat" and has many commonly used OS packages and programs. They are mostly built off the buildpack-deps image (a common base image for programming lanugagues). There are also "slim" variants that include only the CL implementation.

The "development" image is geared toward local interactive development. It is a kitchen-sink image that includes every implementation the project builds an implementation specific image for, as well as all the OS packages needed to load ~every system in Quicklisp, the latest version of ASDF, etc.

The last piece of this project is slime-docker, an Emacs package that automates the starting of CL processes in Docker containers for use with SLIME.

If you'd like to see improvements or additions, would like another implementation to be supported, or have an idea for another category of image, please join in on this project!

comments powered by Disqus