CircleCI maintains a fleet of Docker images, which we call convenience images, for various programming languages and a few databases. These images are specifically designed to run well in a continuous integration (CI) environment. They exist to serve as a quick and convenient starting point for users.

However, the first generation of our convenience images was designed almost four years ago. Since then, we’ve learned a lot about designing efficient images, released reusable packages of configuration called orbs, and Docker tooling itself has grown and become more sophisticated.

Our 14 current Docker images are based on 14, separate, upstream Docker Library images that weren’t designed for CI. This has caused surprise breaking changes for us and users, bloated images, and an inefficient architecture all around. We got to work designing a better system.

Introducing our next-generation convenience images

Our new convenience images were built from the ground up with CI, efficiency, and determinism in mind. Here are some of the highlights:

  • Faster spin-up time - In Docker terminology, these next-gen images will generally have fewer and smaller layers. Using these new images will lead to faster image downloads when a build starts, and a higher likelihood that the image is already cached on the host.

  • Improved reliability & stability - The current images are rebuilt practically every day with potential changes from upstream that we can’t always test fast enough. This leads to frequent breaking changes, which is not the best environment for stable, deterministic builds. Next-gen images will only be rebuilt for security and critical-bugs, leading to more stable and deterministic images.

Next-generation images available now

I’m happy to announce the general availability of the first two convenience images from our next-generation fleet: The CircleCI Base image and the next-gen CircleCI Go (Golang) image.

CircleCI Base image

image: cimg/base:2020.01

This is a brand new Ubuntu-based image designed to install the very bare minimum. All of the next-generation convenience images that we will be releasing in the coming weeks are based on this image.

When to use it?

If you need a generic image to run on CircleCI, to use with orbs, or to use as a base for your own custom Docker image, this image is for you.

Resources

You can find this image on Docker Hub, and the source code and documentation on GitHub.

Next-generation CircleCI Go image

image: cimg/go:1.13

This is a direct replacement for the legacy CircleCI Go image (circleci/golang). It brings with it better documentation, more determinism, and benefits from the highly efficient infrastructure it’s built on.

When to use it?

If you’re already using our legacy Go image, then this image is for you. If you are getting a Go-based project started on CircleCI, this image can help you get going faster with tools pre-installed that Gophers need.

Resources

You can find this image on Docker Hub, and the source code & documentation on GitHub.

What’s next

We have these two new convenience images going GA today with many more in the near future. We have several images currently in public beta that will be GA in the coming weeks. You can check out these beta images right now on CircleCI Discuss.

P.S. Everything is open source and designed for you. Contributions welcome.