Build Docker images without Docker — using Kaniko, Jenkins and Kubernetes

Prabhat Sharma
3 min readAug 16, 2019

--

Note: I will be using an Amazon EKS cluster on AWS and using Amazon ECR for storing images. There will be minor differences for handling other repositories.

Jenkins is a hugely popular build tool that has been around for ages and used by many people. With huge shift to Kubernetes as a platform you would naturally want to run jenkins on Kubernetes. While running Jenkins in itself on Kubernetes is not a challenge, it is a challenge when you want to build a container image using jenkins that itself runs in a container in the Kubernetes cluster.

The process of running Docker-in-Docker (DIND), and setting it up is not very interesting not to mention the hacking that you need to do to achieve it.

An alternative would be Kaniko which provides a clean approach to building and pushing container images to your repository.

In this post we will build a Jenkins pipeline that will be responsible for pulling code, building image and pushing image to Amazon ECR.

If you don’t already have Jenkins installed then follow the steps in this post

We will follow the below steps:

  1. Create a configmap for docker configuration that will use ECR credential helper
  2. Build a Jenkins pipeline

Amazon ECR uses AWS IAM authentication to get docker credentials for pushing the images. ECR crdenetial helper makes getting the credentials for pushing images easier. Setting up ECR crdenetial helper for Docker/Kaniko needs a configuration file. Let’s go ahead and create a configuration file.

Create a configmap docker-config.yaml

Replace 123456789498 with your AWS account number.

Run the below command to create the configmap. You must install the configmap in the same namespace where jenkins is installed.

kubectl -n jenkins apply -f docker-config.yaml

Once you are logged in to Jenkins it’s time to create a new Jenkins pipeline. Follow the steps:

1. Create a New Item

2. Create a new Pipeline

3. Place the pipeline script in the job

Now place the below script in the pipeline script section:

We are using a sample microservice for which we will build an image and push it to ECR. You must also have the123456789498.dkr.ecr.us-west-2.amazonaws.com/sample-microservice ECR repository created before running this pipeline.

We are using an older kaniko docker image (tag debug-539ddefcae3fd6b411a95982a830d987f4214251) as the latest kaniko docker image is not compatible with Jenkins Kubernetes plugin.

Now save the pipeline. You are all set up. Next you can click Build Now link to start the build.

Once the build completes your screen should look like below

and you should have a docker image in your repository:

You are all set !!!

Originally published at https://prabhatsharma.in.

--

--

Prabhat Sharma

A Solutions Architect helping people build scalable applications on cloud.