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.
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:
- 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.
- Feedback on how this image is working for you if you’re coming from an equivalent legacy image.
- Good feedback. Is this working perfectly for you? Let us know that too.
- 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:
||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.|
||link||link||The Clojure programming language.|
||link||link||The Go (Golang) programming language.|
||link||link||The Node.js programming language.|
||link||link||The Java programming language.|
||link||link||The PHP programming language.|
||link||link||The Python programming language.|
||link||link||The Rust programming language.|
||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!