Docker is a container platform. It provides a complete ecosystem of tools to build container images, pull these images from known registries, deploy containers, and manage or orchestrate running containers across a cluster of machines. Docker has popularized container adoption. Even the phrase “dockerize my app” has become common.
The word “Docker” usually refers to its engine. The commercial offering is called Docker Enterprise. There’s also the free community edition that’s simply called Docker Engine. Docker was initially available on Linux but later become available on MacOS and Windows as well.
What are the benefits of using Docker?
Docker provides a consistent runtime across all phases of a product cycle: development, testing, and deployment. For example, if development team has upgraded one dependency, other teams must also do the same. If they don’t, app may work during development but fail in deployment or work with unexpected side effects. Docker overcomes this complexity by providing a consistent environment for your app. Hence, it’s become essential for DevOps practice.
Docker containers are smaller in size and boot up faster compared to VMs. They’re also more cost efficient since many more containers than VMs can run on a machine.
Docker is open source. There’s freedom of choice since any type of application (legacy, cloud native, monolithic, 12-factor) can run in a Docker container. Security is built into the Docker Engine by default. It’s powered by some of the best components such as the containerd. There’s also powerful CLI and API to manage containers. Via certified plugins, we can extend the capabilities of the Docker Engine.
Which are the essential components of the Docker ecosystem?
The Docker Engine is a client-server app of two parts: the Docker Client and the Docker Daemon. Docker commands are invoked using the client on the user’s local machine. These commands are sent to daemon, which is typically running on a remote host machine. The daemon acts on these commands to manage images, containers and volumes.
Using Docker Networking we can connect Docker containers even if they’re running on different machines. What if your app involves multiple containers? This is where Docker Compose is useful. This can start, stop or monitor all services of the app. What if you need to orchestrate containers across many host machines? Docker Swarm allows us to do this, basically manage a cluster of Docker Engines.
Docker Machine is a CLI tool that simplifies creation of virtual hosts and install Docker on them. Docker Desktop is an application that simplifies Docker usage on MacOS and Windows.
Among the commercial offerings are Docker Cloud, Docker Data Center and Docker Enterprise Edition.
Docker enables developers to easily pack, ship, and run any application as a lightweight, portable, self-sufficient container, which can run virtually anywhere. “Containers gives you instant application portability.”
Containers do this by enabling developers to isolate code into a single container. This makes it easier to modify and update the program. It also lends itself, as Docker points out, for enterprises to break up big development projects among multiple smaller, Agile teams using Jenkins, an open-source CI/CD program, to automate the delivery of new software in containers.