Next-Gen CircleCI Convenience Images - Public Beta

Hey Circlers (just completely made that up),

For those who don’t know, we at CircleCI maintain a fleet of Docker images, which we call Convenience Images, for various languages and databases. These images are designed to run well in a CI environment as opposed to production or local environments. They exist to serve as a quick and convenient starting point for users.

The Problem with the Current/Legacy Images

The Docker build system we are using is old and complicated so we’ve been designing a new suite of images. Our 14 images are based off of 14, separate, upstream Docker Library images which weren’t designed for CI. This has caused surprise breaking changes for us and users, bloated images, and an inefficient build system.

New/Next-Gen Images

Our new images are being built from the ground up with CI, efficiency, and determinism in mind. Here’s some of the “highlights”:

  • Faster “Spin-Up” time
    • In Docker terminology, the new images tend to have less layers and each layer tends to be smaller. This is due to installing less bloat, only the tools most of our users need, as well as following Dockerfile best practices to make images efficient. In short, 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
    • Currently images are rebuilt practically everyday, which potential changes from upstream that we can’t always test fast enough. This isn’t good for stable builds that prevent breaking changes. Next-gen images will only be rebuilt for security and critical-bugs, leading to more stable, more deterministic images.
  • Automated Convenience Image Documentation
    • This is still a work in progress. The Next-Gen image build system is being designed to make automated documentation for images a possibility. It will be much, much, easier in the future to understand how Convenience Images work, what software they contain, which tags are available, and more. Stay tuned.

Public Beta Images

We have a few Next-Gen images that have reached “public beta status” with more on the way in the next couple of months. You’re welcome to start using these images (below) and provide your feedback. The feedback we’re looking for:

  1. Feedback on if this image is working for your project or if it’s missing something or doing something “wrong” in your opinion. Particularly for a “language image”, is this image doing something that goes against community-recommendations for that specific programming language.
  2. Feedback on how this image is working for you if you’re coming from an equivalent legacy image.
  3. Good feedback. Is this working perfectly for you? Let us know that too.
  4. Anything else you think you should add.

Feedback can be posted here on this topic, the public beta CircleCI Discuss topic for a specific image, or in a GitHub Issue for a specific image.

Public Beta Images:

Name Image GitHub Discuss Post Notes
Base cimg/base link link All Next-Gen images are based off of this. You can make your own custom CircleCI Docker image off of this base image as well.
Clojure cimg/clojure link link The Clojure programming language.
Go cimg/go link link The Go (Golang) programming language.
Node.js cimg/node link link The Node.js programming language.
OpenJDK cimg/openjdk link link The Java programming language.
PHP cimg/php link link The PHP programming language.
Python cimg/python link link The Python programming language.
Rust cimg/rust link link The Rust programming language.
Ruby cimg/ruby link link The Ruby programming language.

Looking for a missing image? We have 4 more images currently in alpha status. Check back here regularly for updates on the public beta program. There’s a button at the bottom of this topic where you can “watch” or “track” this topic.

Everything is open source and designed for you. Contributions welcome. Any questions, please let us know, thanks!


The Base and Go images have now been promoted to GA. They are stable and ready to go for everyone!

A post was split to a new topic: Ruby image started failing for me

If I want to propose a new image type, is that possible? I currently have built something of cimg/base and want to know if there is a possibility for it to become an officialy convenience image

tool: packer

We don’t have a program to accept 3rd party images at this time but it’s something we’re looking into for later this year.

If you want to create your own CircleCI-ready image though then you’re on the right track, I’d base it off of cimg/base just like you said. That’s the best way to do it.

Can you explain why this would be true? Won’t there still be a large number of different images?

Spin up time is often a very big part of a job’s execution time, so anything in this area is interesting.