An introduction to Docker
I have been wanting to learn more about Docker for months. However, when starting to read Dockers get started page I quickly had to find out that I’m lacking knowledge in too many other concepts. Since my background isn’t computer science I often run across this problem. Luckily, this allows me to constantly learn new things! After writing a post on virtual machines and another about containers this one is finally about Docker!
What is Docker?
Docker is a tool that makes it easy to use containers. We already learned that containerization allows us to package an application and all its dependencies into a little box - the container - which can then run anywhere. This allows developers to be sure that their software will run independently of where it is deployed.
Of course, there were other technologies for containerization before Docker. However, Docker made it much easier and also safer to deploy containers than previous approaches. Another major benefit of Docker is that it’s open source. This means that anyone can contribute to Docker and that Docker can be customized to one’s own needs.
How Docker works
A basic Docker architecture consists of three major parts:
Docker daemon (
The Docker daemon is responsible for creating, running, and monitoring Docker objects like containers or images. It can communicate with other daemons to manage Docker services. Usually, the daemon is launched by the host operating system.
Docker client (
The Docker client talks to the Docker daemon. For most people, the Docker client is the main way to interact with Docker. When calling commands like
docker run, the Docker client sends them to the Docker daemon, who carries out the commands. It’s also possible to interface directly with the daemon without using the Docker client.
A registry stores and distributes Docker images. The big public registries are Docker Hub and Docker Cloud and can be used by anyone to pull or push publically available images. You can also run your own private registry. However, by default
docker pull, docker pushand
docker runcommands will look for the required images on Docker Hub.
When using Docker we create and use different kinds of objects, for examples images, containers, networks or plugins. Images and containers are the most important objects, so let’s take a closer look at them. For more details on containers, take a look at the blog post on containers.
- Template that contains instructions for creating a Docker container
- We can create our own images or use those created by others and published in a registry
- To create an image we first have to create a Dockerfile
- The Dockerfile defines the steps required to create and run the image
- Runnable instance of an image
- A container is defined by its image and the configuration options that we provide when creating or starting the container
- To learn more about containers, look at the corresponding blog post