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