Overview of Docker

Raghav D
4 min readFeb 29, 2020

Docker is an open source platform for developing, shipping, and running applications. Docker has capable of enabling of separate your applications from your infrastructure. Docker provides an easy and efficient way to encapsulate applications from infrastructure to run as a single Docker image. Containers are lightweight because they don’t need the extra load of a hypervisor, but run directly within the host machine’s kernel

components of Docker:

Docker Engine:

Docker Engine is a client-server application installed on host machine, it mainly consists of

  1. Server: It is the docker daemon called dockerd. It can create and manage docker images, Containers, networks, volumes, etc.
  2. Rest API: It specifies interfaces that programs can use to talk to the daemon and instruct it what to do
  3. Command Line Interface (CLI): used to execute the docker commands, CLI uses the Docker REST API to control or interact with the Docker daemon through scripting or direct CLI commands
docker Engine

Docker client: users can interact with Docker via a client, When we execute any docker command, the client sends them to dockerd daemon, which carries them out. Docker API is used by Docker commands. Docker client can communicate with more than one daemon

Docker Registry: Docker registry stores Docker images, it has private and public registries, docker hub is a public registry, by default it looks into docker hub, if we didnt configure any registry, on execution of docker commands like docker pull, docker run it will search for the image on the docker hub

Docker Objects: Images, containers, storage, networking are docker objects

Docker Images: In simple words, a read-only template with instructions for creating a Docker container

Docker Containers: Simply we can say that run-time object of the images

Docker Volumes: Docker volumes are persisting data generated by docker and used by Docker containers, Volumes are totally managed by docker, volume contents exists outside of the container, so container size will not be increase, this is like mounting a volume to the container, mount containers we use -v flag and for docker services we use — mount flags

Network: 5 types of networks

  1. Bridge Network: It is the default network driver for a container. You use this network when your application is running on standalone containers, i.e. multiple containers communicating with same docker host
  2. Host: This driver removes the network isolation between docker containers and docker host. It is used when you don’t need any network isolation between host and container
  3. Overlay: This network enables swarm services to communicate with each other. It is used when the containers are running on different Docker hosts or when swarm services are formed by multiple applications
  4. None: Disables the network to containers
  5. Macvlan: Macvlan networks allow you to assign a MAC address to a container, making it appear as a physical device on your network. The Docker daemon routes traffic to containers by their MAC addresses
Docker architecture

Docker uses of several features of the Linux kernel to deliver its functionality, they are

namespaces and cgroups

Name Spaces:

Namespaces are one of a feature in the Linux Kernel and fundamental aspect of containers on Linux, Docker uses a technology called namespaces to provide the isolated workspace called the container. When you run a container, Docker creates a set of namespaces for that container. These namespaces provide a layer of isolation isolation so that containers need in order to remain portable and refrain from affecting the remainder of the host system, Each aspect of a container runs in a separate namespace and its access is limited to that namespace.

Namespace Types:

  1. Process ID: Process isolation
  2. Mount: Managing filesystem mount points
  3. IPC (Interprocess communication): Managing access to IPC resources
  4. Uts: Isolating kernel and version identifiers
  5. Network : Managing network interfaces

Control groups:

It provides resource limitation and reporting capability within the container space, it means it will limit the container to use specific resources only. Control groups allow Docker Engine to share available hardware resources to containers and optionally enforce limits and constraints

Common control groups

  1. CPU
  2. Memory
  3. Network Bandwidth
  4. Disk
  5. Priority

This is just brief idea to give on docker

--

--