Docker is an open-source platform that enables one to package an application with the operating system (OS) libraries and all its dependencies required to run it in any environment.
Containers are abstractions of the app layer, they package all the code, libraries and dependencies together.
And so we can simply say, Docker, is a platform that helps developers to build, deploy, run, update and manage containers.
Containers are platform-independent and hence Docker can run across both Windows and Linux-based platforms.
Docker was created in 2010 by Solomon Hykes and Sebastien Pahl during the Y combinator startup incubator group and in 2011 it was launched.
Docker simplifies the development and delivery of distributed microservice applications and they have become increasingly popular as organizations shift to cloud-native development.
Docker Engine is composed of the following elements:
Docker CLI - This is a command-line interface which the client uses for interacting with the Docker daemon. It significantly simplifies how you manage container instances.
Docker Daemon - Daemon is a persistent background process that manages Docker images, containers, networks, and storage volumes. The Docker daemon constantly listens to Docker API requests and processes them.
Docker High-level API - This is an API which allows the user to communicate with the Docker Daemon. It can be accessed by an HTTP client.
How does Docker work?
The architecture of Docker uses a client-server model and consists of the Docker’s Client, Docker Host, Network and Storage components, and the Docker Registry/Hub.
When a request is made, the Docker client communicates with the Docker daemon, which performs the heavy tasks of building, running, as well distributing the docker containers.
Now, both the docker client and daemon are able to run on the same system and it is possible to connect the docker client to a remote daemon.
Why use Docker?
Docker technology offers many benefits, such as:
Container versioning - Docker is able to track the versions of a container image, roll back to previous versions and able to trace who built a version and how.
Container reusing - You are able to reuse existing containers as base images.
Improved and seamless container portability
Automated container creation - Using docker, you can automatically build a container based on application source code.
Shared container libraries - Docker allows developers to access thousands of user-contributed containers stored in an open-source registry.