How Docker Container Works?
Tags: webdev, docker, devops, javascript
Published: 2022-03-04 05:56:35

Docker has become the de facto standard in container-based implementation. Docker is an open-source platform, written in GO language, developed by DotCloud and used by developers to build, deploy and run applications. With Docker, one can easily separate their applications from the infrastructure for the fast delivery of the project. It enables developers to package and run the application in a loosely remote environment called a container. The isolation that Docker provides allows developers to run several containers at the same time on a given host.

Initially built on Linux Containers (LXC), Docker now uses container runtime libcontainer (a part of runc). Although containers can be made without using Docker, the platform makes it simpler, safer, and easier to build, deploy and manage containers with its set of tools, dependencies and libraries that are needed to run an application.

But, what does Docker architecture contain, how Docker container works, and when you can use Docker? Let’s understand every concept of Docker.

## Docker Architecture ##
To understand how docker works, we will take a peek into the docker architecture (given in the image below) and understand the components it contains.


![Docker Architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kt4fxmn49dj8oull13mf.png)

### Docker Client ###
A Docker user interacts with Docker through the Docker client (docker). When a developer uses a command like docker run, the client sends this command to the Docker daemon, which carries it out. The Docker client can communicate with multiple daemons simultaneously, using Docker API.

### Docker Daemon ###
Docker Daemon (dockerd) looks for requests from Daemon API and handles objects of Docker like containers, images, volumes, and networks. To maintain the services of Docker, a Docker Daemon can easily communicate with other daemons.

### Docker Desktop ###
Docker Desktop is an application for Windows or Macs environments. It allows developers to develop and share microservices or containerized applications. A Docker Desktop comes with Docker Client (docker), Docker Daemon (dockerd), Docker Content Trust, Docker Compose, Credential helpers, and [Kubernetes](https://www.decipherzone.com/blog-detail/kubernetes-vs-docker-swarm). With Docker Desktop, you can work with languages and development tools you prefer.

### Docker Registries ###
Docker registries is a stateless, highly scalable storage and content distribution system for Docker Images. If you want to tightly control the storage for your image, and fully own an image distribution pipeline for your development workflow, you can use the Docker registry.

Whilst in case you are looking for zero maintenance, instant solution you can go for Docker Hub. Docker Hub comes with a free hosted registry, automated builds, organizational accounts, and other additional features.

### Docker Objects ###
Docker objects are used in assembling an application. These objects can be images, containers, volumes, networks, plugins, etc. In this section, we will provide a brief of Docker Images and Docker Container which are two essential components of the Docker Objects.

### Docker Images ###
A Docker image is a file used to execute code in the container. Docker Images are read-only, immutable templates that act as a set of instructions for creating Docker Containers. Docker images come with metadata describing the needs and capabilities of a container. Dockerfile containing specific instructions are used for building a Docker Image. When you make changes to the Dockerfile and rebuild the image, only the changed layers will be rebuilt, making Docker images small, lightweight, and fast in comparison to virtualization technologies.

### Docker Containers ###

Docker containers are runnable image instances. Using the Docker CLI or API, you can easily create, start, move, stop, and delete a container. A Docker Container can be connected to one or more networks, have its storage, or even create a new image based on its current state. By default, the Docker container is well isolated from other host machines and containers. A container is also defined by its configuration option and image that is used at the time of creation.

## How Docker Works? ##
A client-server architecture is used by Docker. In [Docker](https://www.decipherzone.com/blog-detail/docker-microservices), a Docker client talks to the Docker Daemon (that builds, runs, and distributes Docker containers). The Docker client and daemon communicate on the network interface or UNIX sockets using REST API. The client and daemon of Docker can either run on the same system or a developer can connect the client to the remote Docker daemon. To work with applications that consist of a set of containers, you can use Docker Compose which is another Docker client.

For example, if you run the docker run command while using the default configuration of the registry, the following will happen:

- If you don’t have the local ubuntu image, Docker will pull it from the configured registry.
- Docker will create a new container.
- As a final layer, Docker will allocate a read-write filesystem to the container allowing a running container to build or edit files and directories in the local file system.
- A network interface will be created to connect the container to the default network.
- Then the container will be started and /bin/bash executed by Docker. As the container is attached to the terminal and running interactively, you can give input using the keyboard while the result is logged to the terminal.
- To terminate the /bin/bash command, you can type exit and the container will stop.

## Get started with Docker ##

Docker can be used as a core building block for creating modern platforms and applications. Undoubtedly, with Docker, you can easily deploy code into the CI/CD pipeline, build and run distributed microservices architecture, and create scalable data processing systems. Docker makes the delivery of an application consistent and fast.

Moreover, the platforms or applications that are based on Docker allow extremely portable workloads. Docker containers can run anywhere from a developer’s laptop to virtual machines by cloud providers, in a data centre, or a blended environment.

Being lightweight and fast, Docker offers a cost-effective alternative to virtual machines based on hypervisors. Allowing you to use more compute capacity and achieve your business goals. Now with the extensive knowledge of Docker and how Docker containers work, you can easily decide whether it’s best suited for your business or not.

Source: [How Docker Container Works](https://www.decipherzone.com/blog-detail/how-docker-works)