Docker works on client-server architecture, which includes three main components i.e. Docker client, Docker Host and Docker registry.  The Docker client talks to Docker Daemon, which runs on the host operating system and listens for Docker API requests and manages the Docker objects such as images, containers, networks, and volumes. A daemon can also communicate with the other daemons to manage Docker services  The Docker client and Daemon can run on the same system. The different types of Docker components in a Docker architecture are–  Docker Client: This performs Docker build pull and run operations to establish communication with the Docker Host. This is the primary way where users interact with Docker. When we run the docker commands the client sends these commands to dockerd, which carries them out. Docker API is used by Docker commands. It is possible for Docker client to communicate with more than one daemon.  Docker Host: This It contains the docker daemon, images, containers, networks, and storage. The images will be the kind of metadata for the applications which are containerized in the containers. The Docker Host is used to provide an environment to execute and run applications. Docker Object: When we use Docker, we are creating and using images, containers, networks, volumes, plugins, and other objects. Below is the brief overview of some of those objects.  Images: An image a read-only template which contain instructions for creating a docker container. It is used to store and ship applications. We can either ther create our own images or can only use the images that are created by others and published in a registry. To build own image, we need to create a Docker file by defining the steps needed to create the image and run it. Each instruction in a Docker file creates a layer in the image. When you change the Docker file and rebuild the image, only those layers which have changed are rebuilt. This is part of what makes images so lightweight, small, and fast, when compared to other virtualization technologies. Container: A container is a runnable instance of an image. With the help of Docker API or CLI, we can start, stop, delete or move a container. We can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state. Networks : Docker networking provides complete isolation for docker containers. It requires very less Operating system instances to run the workload. There are primarily 5 network drivers in docker:  Bridge: It is the default network driver. We can use this when your application is running on standalone containers i.e. different containers communicate with the same docker host.  Host: This driver removes the network isolation between docker containers and docker host. When we don’t need any isolation between the container and host then it is used.  Overlay: For communication with each other, it will enable the swarm services.  None: It disables all networking.  macvlan: This driver assigns mac(Media Access control) address to containers to make them look like physical devices. It routes the traffic between containers through their mac addresses.   Storage: We can store data within the writable layer of the container but it requires a storage driver. Storage driver controls and manages the images and containers on our docker host.  With respect to persistent storage, Docker offers four options:-  Data Volumes  Volume Container  Directory Mounts  Storage Plugins  Docker Registry: All the Docker images are stored in docker registry. The public registries which is also known as  Docker Hub or Docker Cloud is accessible for everyone and  can be used by anyone.  We have the privilege to run our private Registry as well, by using Docker pull and Docker run command , which will pull the required image from private configured registry.  Reference: https://docs.docker.com/get-started/overview/