There are probably a lot of technologies you must learn in order to master the modern development and DevOps ecosystem but Docker (and of course orchestration and the containers’ ecosystem) is one of the important skills to have nowadays.
Here are 6 reasons that explain my opinion.
Optimize Hardware Usage
Like virtual machines, containerization changed the way we optimize our hardware usage. With virtual machines you can have some limits.
Let’s imagine a scenario where you should host two applications using the same language but not the same version. You may find a solution or probably a hack to do it in a single VM, but you can finish by creating a new VM in order to host the second application.
VMs can have some limits, but using Docker you can easily deploy multiple applications, using different versions of the same language without creating a new VM.
Distribution & Collaboration
If you would like to share images and containers, Docker allows this “social” feature so that anyone can contribute to a public (or private) image.
Individuals and communities can collaborate and share images. Users can also vote for images. In Docker Hub, you can find trusted (official) and community images.
Some images have a continuous build and security scan feature to keep them up-to-date.
Multi Tenancy & High Availability
Using the right tools from the ecosystem, it is easier to run many instances of the same application in the same server with Docker than the “main stream” way.
Using a proxy, a service discovery and a scheduling tool, you can start a second server (or more) and load-balance your traffic between the cluster nodes where your containers are “living”.
CI/CD — Build Once, Run Everywhere
Docker is used in production systems but it is considered as a tool to run the same application in developer’s laptop/server. Docker may move from development to QA to production without being changed. If you would like to be as close as possible to production, then Docker is a good solution.
Since it solves the problem of “it works on my machine”, it is important to highlight this use case. Most problems in software development and operations are due to the differences between development and production environments.
If your R&D team use the same image that QA team will test against and the same environment will be pushed to live servers, it is sure that a great part of the problems (dev vs ops) will disappear.
There are many DevOps topologies in the software industry now and “container-centric” (or “container-based”) topology is one of them.
This topology makes both Ops and Dev teams share more responsibilities in common, which is a DevOps approach to blur the boundaries between teams and encourage the co-creation.
Isolation & The Dependency Hell
Dockerizing an application is also isolating it into a separate environment.
Same thing as the first point, imagine you have to run two APIs with two different languages or running them with the same language but with different versions.
You may need two incompatible versions of the same language, each *API* is running one of them, for example Python 2 and Python 3.
If the two apps are dockerized, you don’t need to install nothing on your host machine, just Docker, every version will run in an isolated environment.
Since I start running Docker in production, most of my apps were dockerized, I stopped using the host system package manager since that time, every new application or middleware was installed inside the container.
Docker simplifies the system packages management and eliminates the “dependency hell” by its isolation feature.
Using The Ecosystem
You can use Docker with multiple external tools like configuration management tools, orchestration tools, file storage technologies, filesystem types, logging softwares, monitoring tools, self-healing tools ..etc
On the other hand, even with all the benefits of Docker, it is not always the best solution to use, there are always exceptions.
Connect Deeper !
I recently published 10 Great Tips to Learn Docker, you may like it !
If you liked this article or want to discover similar tutorials, you will enjoy reading Painless Docker course.
We also started Shipped Newsletter: An Independent Newsletter Focused On Containers & Orchestration.
Happy hacking 🙂