Deploying a Docker Container with Jenkins Pipelines

1.5 hours
  • 2 Learning Objectives

About this Hands-on Lab

Docker is a great tool for containerization. However, there are some problems that need to be solved when transitioning from a Jenkins Pipeline deployment that uses code artifacts to one that uses Docker. This learning activity will guide you through the process of deploying an app as a Docker container using a Jenkins Pipeline. After completing this exercise, you will have the knowledge necessary to Dockerize applications while still maintaining automated deployment with Jenkins Pipelines.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Configure Jenkins to run the new dockerized train-schedule pipeline

To accomplish this, you will need to do the following setup in Jenkins:

  1. Configure Jenkins credentials for the production server:
  2. Using the cloud_user password, create a Jenkins credential called deploy.
  3. Configure Jenkins credentials for the Docker image registry (Docker Hub).
  4. Create a Jenkins credential called docker_hub_login. You will need a docker hub account in order to perform this step.
  5. Configure a global property in Jenkins to store the production server IP.
  6. Create a global property in Jenkins called prod_ip and set it to the Production Server Public IP that appears on the learning activity page once the servers are started up.
  7. Create a multibranch pipeline project in Jenkins called train-schedule.
  8. Configure the Jenkins project to pull from your fork of the source code.
  9. Make a fork of the Git repo at: https://github.com/linuxacademy/cicd-pipeline-train-schedule-dockerdeploy
Successfully deploy the train-schedule app to production as a Docker container using the Jenkins Pipeline
  1. Implement the following new stages in the Jenkinsfile:

    • Build Docker Image: Build a Docker image with the runnable code inside it.
    • Push Docker Image: Push the image to Docker Hub.
    • DeployToProduction: Deploy the new image to production.
    • Stop and remove any older containers.
    • Pull and run the newly built image.
  2. After implementing these stages, run the build in Jenkins to deploy the application to production!

Additional Resources

Your team is transitioning from a traditional static deployment model to using containers. They hope to eventually implement container orchestration, but right now they want to take the step of running the train-schedule app in production as a Docker container. The team also wants to maintain an automated CI/CD process through this transition. A Dockerfile has already been created for the app which can be used to build Docker images for it, and a production server has been set up with Docker installed.

The team has asked you to modify the Jenkins Pipeline and configure Jenkins so that the Docker image can be built and deployed as part of the Jenkins CD Pipeline. You will need to do the following:

  • Configure Jenkins credentials for the production server.
  • Configure Jenkins credentials for the Docker image registry (Docker Hub).
  • Configure a global property in Jenkins to store the production server IP.
  • Create a multibranch pipeline project in Jenkins called train-schedule.
  • Configure the Jenkins project to pull from your fork of the source code.
  • Add stages to the Jenkins Pipeline (Jenkinsfile) to do the following:
    • Build a Docker image with the code inside it.
    • Push the image to Docker Hub.
    • Deploy the new image to production: stop and remove any older containers, pull and run the newly built image.

You will need a Docker hub account in order to use Docker Hub as an image registry. You will need to enter your credentials into the lab environment Jenkins instance, so feel free to create a fresh Docker Hub account and cancel it after you are done.

You will need to create a personal fork of the source code here: https://github.com/linuxacademy/cicd-pipeline-train-schedule-dockerdeploy

Check out the Jenkinsfile on the example-solution branch for an example of how this pipeline can be implemented. If you use that code, however, be sure to change all references to the willbla/train-schedule Docker image name, to a name that is unique to your Docker Hub account, such as <your Docker Hub username>/train-schedule.

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?