What is Docker?

Docker is an open platform for developing, shipping, and running applications. It enables you to separate your applications from your infrastructure so you can deliver software quickly. With it, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of its methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

It enables developers to build, deploy, run, update and manage containers—standardized, executable components that combine application source code with the operating system (OS) libraries and dependencies required to run that code in any environment.

Containers simplify development and delivery of distributed applications. They have become increasingly popular as organizations shift to cloud-native development and hybrid multi cloud environments. It’s possible for developers to create containers without it, by working directly with capabilities built into Linux and other operating systems. But it makes containerization faster, easier and safer.

A container is a runnable instance of an image. You can create, start, stop, move, or delete a container using the Docker API or CLI. You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.

By default, a container is relatively well isolated from other containers and its host machine. You can control how isolated a container’s network, storage, or other underlying subsystems are from other containers or from the host machine.

A container is defined by its image as well as any configuration options you provide to it when you create or start it. When a container is removed, any changes to its state that are not stored in persistent storage disappear.

It uses a client-server architecture. The Docker client  (DC) talks to the Docker daemon, which does the heavy lifting of building, running, and distributing your Docker containers. The DC and daemon can run on the same system, or you can connect a DC to a remote Docker daemon. The DC and daemon communicate using a REST API, over UNIX sockets or a network interface. Another DC is Docker Compose, that lets you work with applications consisting of a set of containers.