Using Watchtower to Keep Containers Up to Date

1 hour
  • 6 Learning Objectives

About this Hands-on Lab

Tired of having to manually update several containers, you’ve decided to look for an automated solution.

After doing some research, you have discovered Watchtower. Watchtower is a container that updates all running containers when changes are made to the image that it is running.

You will need to create a Dockerfile that will be used to create a Docker image. The image will be pushed to Docker Hub.

Next, you will create a container using this image. Once the image is created, you will deploy the Watchtower container. After Watchtower is deployed, you will update the Dockerfile, rebuild the image, and push the changes to Docker Hub.

Watchtower checks for changes every 30 seconds. Once it detects the changes, Watchtower will update the running container.

For more information on Watchtower you can go [here](https://github.com/v2tec/watchtower).

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create the Dockerfile

Create a Dockerfile:

[[email protected]]$ vi Dockerfile

The Dockerfile should contain the following:

FROM node
RUN mkdir -p /var/node
ADD src/ /var/node/
WORKDIR /var/node
RUN npm install
EXPOSE 3000
CMD ./bin/www
Build the Docker Image

Build the Docker image:

[[email protected]]$ docker image build -t USERNAME/lab-watchtower -f Dockerfile .
Push the Image to Docker Hub

Login to Docker Hub:

docker login

Push the image to Docker Hub:

docker image push USERNAME/lab-watchtower
Create a Demo Container

Create the container that Watchtower will monitor:

[[email protected]]$ docker container run -d --name demo-app -p 80:3000 --restart always USERNAME/lab-watchtower
Create the Watchtower Container

Create the Watchtower container that will monitor the demo-app container:

[[email protected]]$ docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower -i 30
Update the Docker Image

After creating /var/node, add an instruction to create /var/test.

Update the Docker image:

[[email protected]]$ vi Dockerfile

Add change to Dockerfile:

RUN mkdir -p /var/test

Rebuild the image:

[cloud_use[email protected]]$ docker build -t USERNAME/lab-watchtower -f Dockerfile .

Push the new image:

[[email protected]]$ docker image push USERNAME/lab-watchtower

Additional Resources

In this lab, we will be using Watchtower to monitor containers for updates. In order to complete this learning activity, we will need a Docker Hub account.

In the home directory of cloud_user we will find the lab directory. Change to that directory.

Create the Dockerfile

  1. The base image should be node.
  2. Using the RUN instruction, make a directory called /var/node.
  3. Use the ADD instruction to add the contents of the src directory into /var/node.
  4. Make /var/node the working directory.
  5. Execute an npm install.
  6. Set ./bin/www as the command.
  7. From the command line, log in to Docker Hub.
  8. Build the image using <USERNAME>/lab-watchtower.
  9. Push the image to Docker Hub.

Create the demo-app

  1. Create a Docker container called demo-app.
  2. The port mapping should be port 80 on the host, mapping to 3000 on the container.
  3. The restart policy should be set to always.
  4. Use the image that we created, <USERNAME>lab-watchtower.

Create the Watchtower Container

  1. Create a Docker container called watchtower.
  2. The restart policy should be set to always.
  3. Use the -v flag to set /var/run/docker.sock:/var/run/docker.sock.
  4. Use the v2tec/watchtower followed by the -i flag, to set the iteration to 30 seconds.

Update the Docker Image

  1. After creating /var/node, add an instruction to create /var/test. 1.Rebuild the image.
  2. Push the image to Docker Hub.

Watchtower Will Update demo-app

  1. The Watchtower interval is set to 15 seconds.
  2. After about 15 seconds, check to see if the container has been updated by executing docker ps.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?