Last year we released next-gen Convenience Images for the majority of the CircleCI Docker images. This year we will release the rest including some new ones. Need a refresher on legacy Convenience Images vs next-gen ones?
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 Docker build system we were using is old and complicated so we’ve designed 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.
- CircleCI Developer Hub Support
- next-gen Convenience Images are browsable on the new Developer Hub.
We have a couple Next-Gen images that will reach “public beta status” with more on the way. You’re welcome to start providing 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 or in a GitHub Issue for a specific image.
Everything is open source and designed for you. Contributions welcome. Any questions, please let us know, thanks!