Docker Buys AtomicJar to Spur Dev-Led Integration Testing
With its acquisition on Monday of AtomicJar, Docker will have a way to allow developers to test their applications for production usage without sending them through an entire continuous integration (CI) pipeline, providing a potential saving of costs, labor, and time, the company claims.
AtomicJar is the privately-held company that built the popular Testcontainers, an open source integration testing framework that hooks up developers with disposable lightweight instances of containerized applications — such as databases, browsers and other applications — for integration testing.
The tool makes it easier to see how applications would run in a full production environment, including how they interact with the supporting dependencies, including other applications.
The company wants to build out a set of tools to support what Docker CEO Scott Johnston calls “the developer’s inner loop,” allowing them to work on their applications as much as possible before handing them over to often cumbersome and bureaucratic CI/CD processes, which are the final step before running in production mode.
“Docker with its Docker Desktop prominence, is in a unique position to bring the best of local together with the best of cloud,” Johnston told The New Stack.
Despite the influx of cloud IDEs, most development is still done on programmers’ laptops. But in cloud native and microservices-based environments, testing how well an application works in a system largely comprised of remote dependencies can be a configuration nightmare or impossible altogether.
Hence the popularity of Testcontainers.
DoorDash, Spotify, Uber, and Netflix all use the technology, which saw a doubling of pulls from Docker Hub in 2022 (from 50 million to 100 million). Currently, it is being downloaded more than 10 million times a month, making it one of the most popular projects on the hub.
What Testcontainers Do
Deloitte Digital Engineer Richard North created Testcontainers in 2015. Testcontainers tackled the challenge of integration testing in distributed environments. Integration testing ensures components work together as a system.
Connecting new software to an actual system component can be painful, however, given all the configuration (and synchronization between production and developer environments) that would need to be done.
As an alternative, Testcontainers offers a library of applications and libraries that can be spun up quickly to replicate the behavioral characteristics of these applications in a production setting, albeit in a way that uses far fewer resources.
“Testcontainers allow developers to test and develop their code against the real dependencies they will use when the app goes live for use,” Eli Aleyner, co-founder of AtomicJar, once explained to The New Stack.
“For example, a developer could write a test that is to be executed with a real instance of Kafka, MySQL, or any other technology. When the test is complete, it will tear down any dependencies. This allows developers to create self-contained, repeatable and idempotent tests that can be run either locally or in the continuous integration process.”
Spinning up a Redis container would involve adding this code to the core application:
var redis = new GenericContainer("redis:5.0.3-alpine")
When testing the app, the dependencies would be spun up as containers for the tests and then deleted when the test is finished.
Testcontainers has libraries for .Net, Golang, Node and Java, as well as for a number of other languages. AtomicJar has been building the base images for popular dependencies, and project maintainers have been contributing their own Testcontainer images as well.
In addition to the core Testcontainers, AtomicJar also fielded Testcontainers Desktop and Testcontainers Cloud, both of which will be incorporated into the Docker environment as well.
How Testcontainers Streamlines CI
Testcontainers should fit in nicely with the other inner-loop development tools Docker introduced at Dockercon in October. The company also introduced Docker Scout (a software supply chain tool), the next generation of Docker Builds — which offers the option of building images in the cloud — and Docker Debug, all of which are part of Docker Desktop.
“Now developers can build a container. They can test it locally. They can debug it locally,” and repeat the process as needed, Johnston said. “Developers don’t have to cobble together scripts, they don’t have to go hack on CI in the pipeline. They can solve issues and get the feedback right there locally. And if you solve a problem right at the moment of creation, it’s way less expensive than solving it in CI or solving it downstream in production.”
The current staff of AtomicJar will join Docker and will continue to work on the software, while Docker will introduce the software to its millions of Docker Desktop users.
This is the seventh acquisition for Docker since 2019. Terms of the deal, which involved a mix of a mix of equity and cash were not disclosed.