DOCKER OVERVIEW

Docker is an open platform that greatly reduces the delay between writing code and running the code, because it is the open platform for developing, shipping and running of applications.
It is also a platform for developers and sysadmins to build, run, and share applications with containers. The use of containers to deploy applications is called containerization. In a loosely isolated environment called a container, Docker offers the ability to bundle and run an app.
Containers are lightweight since they don't require a hypervisor's extra load and you can run more containers than if you were using virtual machines on a given hardware combination.
Containerization Advantages:
Flexible | It is possible to containerize even the most complex applications. |
Lightweight | Containers exploit and share the host kernel, making them much more powerful than virtual machines in terms of device resources. |
Portable | You can build, deploy to the cloud, and run anywhere locally. |
Loosely-Coupled | Containers are extremely self-sufficient and encapsulated, allowing one to be replaced or upgraded without interrupting others. |
Scalable | You can improve and automatically distribute replicas of containers around a datacenter. |
Secure | Containers add aggressive constraints and isolation to processes without the user having any configuration. |
DOCKER ENGINE

Docker Engine With these key components, it is a client-server application:
A server A type of long-running program known as the daemon process (the dockerd command). A REST API This defines interfaces that can be used by programs that talked to the daemon and teach it what to do. A command line interface (CLI) is the client that used on the docker command.
In order to monitor or communicate with the Docker daemon through scripting or direct CLI commands, the CLI uses the Docker REST API. The underlying API and CLI are used by several other Docker apps.
DOCKER ARCHITECTURE

Based on the explanation before, Docker client talks to the Docker daemon, the Docker client on the same system, or a Docker client can be attached to a remote Docker daemon. That allows the development, operating, and distributing of your Docker containers heavy lifting. You can run the Docker client and the daemon on the same system, or you can link to a Docker client to a Docker remote daemon.
The Explanation Docker Term:
Docker Daemon
The docker objects such as images, containers, networks, and volumes is managed and requested by Docker API that listened by The Docker daemon (dockerd) and it is also can communicate with other daemons to manage Docker services
Docker Client
The docker client is when the docker users interact with Docker. The command that we used, for example docker run, the client sends these commands to dockerd, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon.
Docker Registries
Docker images is stored by Docker registry. Anyone can use Docker Hub because it is public registry and also by default, Docker is configured to look for images on Docker Hub. We can even run your own private registry. When you use the docker pull or docker run commands, the required images are pulled from your configured registry. Our image is pushed to your configured registry when we push with docker push command .
Docker Objects
At the Docker Host there several docker objects that we used and created like images, containers, networks, volumes, plugins, and other objects. There will have a brief explanation below,
Docker Images
An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization.
Docker Containers
A container is an instance of an image which can be run. By using Docker API or CLI, we can build, start, end, transfer, or remove a container, and we can manage the isolated network of a container on one or more networks, link storage to it, or even build a new image depending on the current state.
Docker Services
A Services helps you to scale containers across numerous Docker daemons, all of which operate together with several managers and workers as a swarm. A Docker daemon is a member of a swarm, and all daemons use the Docker API to interact. A service helps you to specify the desired state, such as the amount of service replicas that must be active at any given time.