Docker ecosystem
Docker is a platform or ecosystem around creating and running containers that can hold just what you need for a single application or technology stack. You can assemble a stack of components that you need, run and destroy them, keeping the system clean and ucluttered with packages and data you no longer need. A container in a nutshell is a program with it's own isolated set of hardware resources. So it kind of has it's owns little space of memory, networking, CPU and disk space.
The ecosystem consist of:
- Docker CLI. In a short, you use Docker CLI to deploy a Docker container, interact with Docker Server, pull images and so on. There are a large number of Docker CLI commands, which provide information relating to various objects on a given Docker host or Docker Swarm cluster.
- Docker Server. Builds Dockerfiles and turns them into usable images, run the containers, maintain the containers, upload the images, creates networks, keep the logs etc.. It is the core of Docker and nothing else will run without it
- Docker Images. A Docker Image is a read-only template that contains a set of instructions for creating a container. It provides a convenient way to package up applications and which you can share with other Docker users. Images have hash, name and tag and have the layered structure. Mostly are created from Dockerfile: each instruction from Dockerfile is creating a layer which can be reused in future builds of images.
- Docker Hub. Provides public and private repositories for images. This is a location where your Docker images are actually stored and comprises a collection of related images.
- Docker Compose. Allows to assemble application consisting of multiple containers simpler, you can declare all of them in a single configuration file started with one command.
- Docker Machine and Swarm. Machine - provides a set of tools for moving and scaling your local projects to a variety of virtualization and cloud providers. When combined with Swarm, Machine can create clusters of Docker instances that can be treated as one, single, large Docker instance.