In a talk delivered at dotScale 2013, Docker co-founder Solomon Hykes revisited the origins of his then-recently released open-source tool. “Docker is pretty special because almost immediately it got a lot of buzz. People got really excited about it, and we didn’t really expect it.”
The buzz is still going strong. Take, for example, Stack Overflow’s annual Developer Survey, a popular tool for gauging the pulse of the software engineering community. The 2020 edition of almost 65,000 respondents outlined technologists’ enthusiasm for Docker, which received “most-wanted” platform honors, among nods in other categories.
Kensho Technologies, which aims to harness machine learning and AI to inform insights for the financial industry, is just one local tech organization leveraging Docker, which leans on containers to help teams efficiently deliver software while minimizing hiccups that might stymy the process. Venkatesh Thirumale, leader of the site reliability engineering team, highlighted the platform as a boon for debugging, carrying out upgrades, testing and deployment, among other benefits conferred.
“My favorite thing about Docker is the efficiency provided with layers. Each layer is a Docker image that the next one is based off of,” Thirumale said.
Below, Thirumale explained how engineers at the Cambridge, Mass.-based company incorporate Docker into their tech stack and the advantages reaped from its use.
First, tell us a bit about how Docker fits into your tech stack and how you leverage it in your work.
Kensho uses Docker for containerization with Kubernetes. We use Docker during all stages of the software development life cycle, including development, testing and deployment. Almost all the services we run are based off of Docker images.
During development, teams have their own space on Harbor where they share work, including Docker images. This is very effective for speed of development because these images do not need to meet the testing standards.
For unit and integration testing, we isolate the environment by running the tests within a Docker image, thereby not needing specialized testing environments and clean-up. Jenkins — which we use for unit tests, integration testing and deployments — uses Docker images for integration testing to stand up test services with the help of CI-specific Kubernetes deployments.
The Docker images for production environments are only built by automated processes. These are placed in a different location to enforce standard processes for the quality of the images.
Kensho uses Docker during all stages of the software development life cycle.”
What is your number one favorite thing about Docker, and why?
My favorite thing about Docker is the efficiency provided with layers. Each layer is a Docker image that the next one is based off of. This is extremely helpful in debugging because we can run and log on to the previously successful image layer, inspect the environment, make changes and debug easily. This eliminates the need to simulate the environment where the error occurred.
The other area where this feature helps is during upgrades, like when we want to use a newer Ubuntu base or library, or if we want to change dependencies. The change is only one line from the user's perspective, but the new image that is different runs through the same validation process.
The layers help during testing and deployments because these layers are cached and they do not need to be built every single time during each run. When we run the unit tests multiple times, the previous layers are reused, improving build-time efficiency and reducing the load on the Docker registry. There are significant benefits provided by the layers that are completely transparent to the user, such as smaller image size and lightened load on the file system.