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 of our convenience images from our next-generation fleet.

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. You can find this image on Docker Hub, and the source code and documentation on GitHub.

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.

Language images

Node image

image: cimg/node:12.16

This is a direct replacement for the legacy CircleCI Node image (circleci/node). You can find this image on Docker Hub, and the source code & documentation on GitHub.

Go image

image: cimg/go:1.13

This is a direct replacement for the legacy CircleCI Go image (circleci/golang). You can find this image on Docker Hub, and the source code & documentation on GitHub.

OpenJDK image

image: cimg/openjdk:14.0

This is a direct replacement for the legacy CircleCI OpenJDK image (circleci/openjdk). You can find this image on Docker Hub, and the source code & documentation on GitHub.

Ruby image

image: cimg/ruby:2.6.5

This is a direct replacement for the legacy CircleCI Ruby image (circleci/ruby). You can find this image on Docker Hub, and the source code & documentation on GitHub.

Rust image

image: cimg/rust:1.43.0

This is a direct replacement for the legacy CircleCI Rust image (circleci/rust). 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 preview that will be GA in the coming weeks. You can check out these preview images right now on CircleCI Discuss.

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