Updating Containers with Watchtower

1 hour
  • 6 Learning Objectives

About this Hands-on Lab

For the last six months, the Acme Anvil Corporation has been migrating some of their bare metal infrastructure to Docker containers. After the initial implementation, the team has decided that they need a way to manage container updates.

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

You have been tasked with creating a proof of concept for the team. 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:

vi Dockerfile

The Dockerfile should contain the following:

FROM node

RUN mkdir -p /var/node
ADD content-express-demo-app/ /var/node/
WORKDIR /var/node
RUN npm install
CMD ./bin/www
Build the Docker Image

Build the Docker image:

docker build -t USERNAME/express -f Dockerfile .
Push the Image to Docker Hub

Login to Docker Hub:

docker login

Push the image to Docker Hub:

docker push USERNAME/express
Create a Demo Container

Create the container that Watchtower will monitor:

 docker run -d --name demo-app -p 80:3000 --restart always USERNAME/express
Create the Watchtower Container

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

docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -i 30
Update the Docker Image

Update the Docker image:

docker build -t USERNAME/express -f Dockerfile .

Repush the image to Docker Hub:

docker push USERNAME/express:latest

Additional Resources

Welcome to the second learning activity! In this learning activity, you will be using Watchtower to monitor containers for updates. In order to complete this learning activity, you will need a Docker Hub account.

Log in to your live environment and sudo to root.

Create the Dockerfile

  1. The base image should be node.
    • Using the RUN instruction, make a directory called /var/node.
    • Use the ADD instruction to add the contents of the code directory into /var/node.
    • Make /var/node the working directory.
    • Execute an npm install.
    • Set ./bin/www as the command.
    • From the command line, log in to Docker Hub.
    • Build your image using <USERNAME>/express.
    • Push the image to Docker Hub.

Create the demo app

  1. Create a Docker container called demo-app.
    • The port mapping should be port 80 on the host, mapping to 3000 on the container.
    • The restart policy should be set to always.
    • Use the image that you created, <USERNAME>/express.

Create the Watchtower container

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

Update the Docker image

  1. Add an instruction to create /var/test. This should be done after creating /var/node.
    • Rebuild your image.
    • Push the image to Docker Hub.

Watchtower will update demo-app

  1. The Watchtower interval is set to 30 seconds.
  2. After about 30 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?