2022-06-03

Docker Overview

What is Docker

Docker is an open-source containerization platform that enables developers to package applications and their dependencies into lightweight, portable, and self-sufficient containers. These containers can run on any system with Docker installed, regardless of the underlying infrastructure. This flexibility allows developers to focus on writing code without worrying about the intricacies of managing different environments or configurations.

Containers vs. Virtual Machines

Containers and virtual machines (VMs) share some similarities, but they differ in crucial ways. VMs run entire operating systems on a virtualized hardware layer, which can lead to resource inefficiency and longer startup times. On the other hand, containers share the host system's kernel and use less resources, making them faster, more lightweight, and more scalable.

Benefits of Docker

Docker offers several advantages over traditional deployment methods:

  • Consistency
    Docker ensures that applications run the same way across different environments, reducing the "it works on my machine" problem.

  • Isolation
    Containers provide a secure and isolated environment for applications, preventing conflicts and facilitating the management of dependencies.

  • Scalability
    Docker enables easy horizontal scaling, allowing you to deploy multiple instances of a container to handle increased load.

  • Portability
    With Docker, you can run applications on any system that supports Docker, simplifying deployment and migration processes.

  • Versioning
    Docker images can be versioned and updated, making it easy to roll back to previous versions or deploy updates.

Docker Components

Docker has several key components:

  • Docker Engine
    The core of Docker, responsible for building and running containers.

  • Docker Images
    Read-only templates used to create containers.

  • Docker Containers
    Running instances of Docker images that encapsulate applications and their dependencies.

  • Docker Hub
    A public registry for sharing and distributing Docker images.

  • Dockerfile
    A script that defines how to create a Docker image by specifying its base image, dependencies, and configuration.

Docker Architecture

Docker follows a client-server architecture, comprising several components that work together to build, deploy, and manage containers.

Docker Architecture
Architecture of Docker

Docker Engine

The Docker Engine is the heart of the Docker platform. It is responsible for creating, running, and managing containers. The Docker Engine consists of the Docker daemon (dockerd), REST API, and the Docker CLI.

  • Docker daemon (dockerd)
    A background service running on the host that listens for Docker API requests and manages Docker objects like containers, images, and networks.

  • REST API
    Allows communication between the Docker daemon and Docker clients.

  • Docker CLI
    A command-line interface that enables users to interact with the Docker daemon.

Docker Client and Docker Daemon

The Docker client communicates with the Docker daemon to perform various tasks, such as building and running containers. Users interact with the Docker client using the Docker CLI or other third-party tools.

When a user runs a command, the Docker client sends a request to the Docker daemon via the REST API. The Docker daemon processes the request and returns the result to the client.

Docker Images and Registries

Docker images are the building blocks of containers. They are read-only templates containing the application code, dependencies, libraries, and runtime environment.

Docker images are stored in registries, which are centralized repositories for sharing and distributing images. Docker Hub is the default public registry, but users can also create private registries for their organizations.

Docker Containers

A Docker container is a running instance of a Docker image. Containers are lightweight, portable, and isolated environments that encapsulate an application and its dependencies.

Containers are created from images and can be started, stopped, and removed. Each container has a unique filesystem and network stack, ensuring isolation from other containers on the same host.

Docker Networks

Docker provides built-in networking capabilities that allow containers to communicate with each other and with external systems. Docker networks enable you to isolate and secure container traffic, assign IP addresses, and define communication rules between containers.

Docker supports various network drivers, each with specific use cases and characteristics:

  • Bridge
    The default network driver, suitable for standalone containers.

  • Host
    Bypasses the Docker network stack, allowing containers to share the host's network stack directly.

  • Overlay
    Enables multi-host networking, useful for distributed applications and container orchestration.

  • Macvlan
    Assigns a MAC address to containers, making them appear as physical devices on the network.

Docker Volumes and Storage

Docker provides a storage system for managing data in containers. Docker volumes are the preferred method for persisting data generated by containers or sharing data between containers. Volumes are created and managed by Docker and can be easily backed up, migrated, or shared between containers and hosts.

References

https://www.docker.com/
https://docker-curriculum.com/
https://www.geeksforgeeks.org/architecture-of-docker/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!