Select Page


Docker is a handy gizmo for automating the deployment of Linux packages within tool packing containers, however to take complete benefit of its possible every element of an software must run in its personal particular person container. For complicated packages with numerous parts, orchestrating the entire packing containers to start out up, keep up a correspondence, and close down in combination can briefly develop into unwieldy.

The Docker neighborhood got here up with a well-liked resolution known as Fig, which allowed you to make use of a unmarried YAML report to orchestrate your entire Docker packing containers and configurations. This become so well-liked that the Docker staff made up our minds to make Docker Compose in accordance with the Fig supply, which is now deprecated. Docker Compose makes it more uncomplicated for customers to orchestrate the processes of Docker packing containers, together with beginning up, shutting down, and putting in place intra-container linking and volumes.

On this instructional, we will display you the right way to set up the newest model of Docker Compose that will help you set up multi-container packages.


To observe this newsletter, you are going to want an Ubuntu 18.04 server with the next:

As soon as those are in position, you are ready to observe alongside.

Be aware: Even if the Necessities give directions for putting in Docker on Ubuntu 18.04, the docker instructions on this article must paintings on different running techniques so long as Docker is put in.

Step 1 — Putting in Docker Compose

Even supposing we will set up Docker Compose from the legit Ubuntu repositories, it’s a number of minor model in the back of the newest unencumber, so we will set up Docker Compose from the Docker’s GitHub repository. The command underneath is somewhat other than the only you can to find at the Releases web page. Through the use of the -o flag to specify the output report first somewhat than redirecting the output, this syntax avoids working right into a permission denied error brought about when the use of sudo.

We will take a look at the current release and if essential, replace it within the command underneath:

  • sudo curl -L`uname -s`-`uname -m` -o /usr/native/bin/docker-compose

Subsequent we will set the permissions:

  • sudo chmod +x /usr/native/bin/docker-compose

Then we will check that the set up used to be a success by means of checking the model:

This may increasingly print out the model we put in:


docker-compose model 1.21.2, construct a133471

Now that we’ve got Docker Compose put in, we are able to run a “Hello World” instance.

Step 2 — Operating a Container with Docker Compose

The general public Docker registry, Docker Hub, features a Hi Global symbol for demonstration and trying out. It illustrates the minimum configuration required to run a container the use of Docker Compose: a YAML report that calls a unmarried symbol:

First, we will create a listing for the YAML report and transfer into it:

  • mkdir hello-world
  • cd hello-world

Then, we will create the YAML report:

Put the next contents into the report, save the report, and go out the textual content editor:


 symbol: hello-world

The primary line within the YAML report is used as a part of the container title. The second one line specifies which symbol to make use of to create the container. Once we run the command docker-compose up it is going to search for an area symbol by means of the title we specified, hello-world. With this in position, we’ll save and go out the report.

We will glance manually at pictures on our machine with the docker pictures command:

When there aren’t any native pictures in any respect, simplest the column headings show:



Now, whilst nonetheless within the ~/hello-world listing, we will execute the next command:

The primary time we run the command, if there is not any native symbol named hello-world, Docker Compose will pull it from the Docker Hub public repository:


Pulling my-test (hello-world:newest)... newest: Pulling from library/hello-world c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull entire Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Standing: Downloaded more recent symbol for hello-world:newest . . .

After pulling the picture, docker-compose creates a container, attaches, and runs the hello program, which in flip confirms that the set up seems to be operating:


. . . Growing helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hi from Docker. my-test_1 | This message displays that your set up seems to be operating appropriately. my-test_1 | . . .

Then it prints an evidence of what it did:

Output of docker-compose up

1. The Docker consumer contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" symbol from the Docker Hub. 3. The Docker daemon created a brand new container from that symbol which runs the executable that produces the output you're lately studying. 4. The Docker daemon streamed that output to the Docker consumer, which despatched it in your terminal.

Docker packing containers simplest run so long as the command is energetic, so as soon as hiya completed working, the container stopped. Because of this, after we take a look at energetic processes, the column headers will seem, however the hello-world container would possibly not be indexed as a result of it is not working.



We will see the container data, which we will want in the next move, by means of the use of the -a flag which displays all packing containers, now not simply the energetic ones:


CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06069fd5ca23 hello-world "/hello" 35 mins in the past Exited (0) 35 mins in the past drunk_payne

This presentations the tips we will want to take away the container after we’re finished with it.

Step 3 — Disposing of the Symbol (Non-compulsory)

To keep away from the use of pointless disk house, we will take away the native symbol. To take action, we will want to delete the entire packing containers that reference the picture the use of the docker rm command, adopted by means of both the CONTAINER ID or the NAME. Underneath, we are the use of the CONTAINER ID from the docker playstation -a command we simply ran. You’ll want to change the ID of your container:

As soon as all packing containers that reference the picture had been got rid of, we will take away the picture:


We now have now put in Docker Compose, examined our set up by means of working a Hi Global instance, and got rid of the verify symbol and container.

Whilst the Hi Global instance showed our set up, the straightforward configuration does now not display some of the primary advantages of Docker Compose — having the ability to deliver a bunch of Docker packing containers up and down all on the similar time. To look the facility of Docker Compose in motion, you may like to try this sensible instance, How To Configure a Continuous Integration Testing Environment with Docker and Docker Compose on Ubuntu 16.04 (notice: this newsletter is for Ubuntu 16.04 somewhat than 18.04)