Docker Compose
Last updated
Last updated
There are two main ways in which people run Docker. The first way uses the docker
command, which we covered in the previous section. In this section, we'll look at the second way, in which a configuration file is used to define the settings for our Docker container.
In this step of the guide, we will cover:
Why would we use configuration files when we can just use commands? Some Docker commands can get pretty long. Plus, if we want to run 7+ containers as part of one website, it can be a lot of work entering 7 docker run
or docker rm
commands every time you want to start/stop our websites.
docker-compose files are usually called docker-compose.yml
. They are nothing more than text files, and they use a specific notation called , which is like JSON, but more readable. docker-compose
is also the name of the command we'll use to run Docker this way.
In this step of the guide, we won't cover everything you can do with docker-compose files (that would be a lot), but we will cover some basics, and show you how to use them to run containers.
In this step, we'll set up a simple docker-compose file, that tells Docker how we want to run whoami.
Make a new directory, and in that directory, create a new file called docker-compose.yml
. Using a text editor, enter the following contents into docker-compose.yml
:
Let's go over how this file works:
The line version: '3'
tells Docker which version of docker-compose syntax to expect
services
is the yaml section in which we list the applications we want to run
whoami
is the name we have given to the service we want to run
image: containous/whoami
tells Docker which image to use for the container
The lines ports:
and - 80:80
tell Docker that we want port 80 on the outside of the container, to be mapped to port 80 on the inside of the container.
Notice that the syntax is similar to what we used in the docker run
command in the Whoami section. That is of course intentional, and shows how Docker and docker-compose are closely related.
Running docker-compose is simple, since we already did the hard work in creating the configuration file. Docker assumes that a docker-compose file is called docker-compose.yml
, so all we need to do, is run
This gave the output
The important line above is play-whoami-1 | Starting up on port 80
. This tells us that the line Starting up on port 80
was logged from within a container called play-whoami-1.
Once again, let's use curl http://localhost:80
in a new terminal to check the container is running. This gives a similar output to when we ran whoami with docker
.
Running docker ps
confirms the Hostname output by whoami, and the name of the container (play-whoami-1) that we saw from the output of docker-compose up
(scroll across to see the names).
Stopping docker-compose is similar to stopping a container started with docker
. We can press Ctrl+c to exit.
We can confirm that the container has stopped by running docker ps -a
Removing containers that were launched with docker-compose
, is done easily with the command
In this step of the guide, we showed how docker-compose
can be used to run, stop and remove applications. We saw how similar using docker-compose
is to using docker
commands, but also how running applications can be simpler this way, since the complexity is hidden in the docker-compose.yml
file.
This makes up the last 20% of what I consider to be the requirements for a capable Docker user. There may be a few remaining concepts that this guide has not covered yet, but there is nothing major. The advantage of learning to use docker-compose, is that you can easily use other people's configuration files to launch nodes, websites and so on, without needing to know how everything was configured internally.