DEV Community

Cover image for Install Jenkins with Docker 🐳
Duc Tran
Duc Tran

Posted on • Edited on

Install Jenkins with Docker 🐳



Downloading and running Jenkins on Docker

The recommended Docker image to use is the Official jenkins/jenkins
image from Docker hub repo. A new jenkins/jenkins
image is published each time a new release of Jenkins Docker is published (Don't use Jenkins image - Already deprecated).
OK!!! Let's start.

Note: To install Jenkins, we need to deploy 2 containers: docker:dind and jenkins/jenkins.

Step 1: Create bridge network for 2 container

docker network create jenkins
Enter fullscreen mode Exit fullscreen mode

Step 2: Setup docker:dind (DinD: Docker-in-Docker): is just what it says running Docker inside a Docker container

docker run --name jenkins-docker -d \
  --privileged --network jenkins --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume ~/docker-certs-jk:/certs/client \
  --volume ~/jenkins-home:/var/jenkins_home \
  -p 2376:2376 docker:dind --storage-driver overlay2
Enter fullscreen mode Exit fullscreen mode

--privileged: Running Docker in Docker currently requires privileged access to function properly.

--network-alias docker: Makes the Docker in Docker container available as the hostname docker within the jenkins network.

--env DOCKER_TLS_CERTDIR=/certs: Enables the use of TLS in the Docker server.

--volume ~/jenkins-home:/var/jenkins_home: Mounting volume jenkins-home to workspace directory of Jenkins.

Steps 3: Deploy container Jenkins. We can use command to run container:

docker run --name jenkins -d \
  --network jenkins --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
  -p 8080:8080 -p 50000:50000 \
  -v ~/jenkins_home:/var/jenkins_home \
  -v ~/docker-certs-jk:/certs/client:ro \
  jenkins/jenkins:2.289.3-lts-jdk11
Enter fullscreen mode Exit fullscreen mode

But i'll custom for my new jenkins image. Create Dockerfile:

FROM jenkins/jenkins:2.289.3-lts-jdk11

USER root

RUN apt-get update && apt-get install -y apt-transport-https \
    ca-certificates curl gnupg2 \
    software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/debian \
     $(lsb_release -cs) stable"
RUN apt-get update && apt-get install -y docker-ce-cli

USER jenkins
Enter fullscreen mode Exit fullscreen mode

Note: You can see more in my repo
Navigate to directory with Dockerfile and build new image:

docker build -t jenkins-new:v1 .
Enter fullscreen mode Exit fullscreen mode

Then, we run the new jenkins image as container in Docker:

docker run --name jenkins -d \
  --network jenkins --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
  -p 8080:8080 -p 50000:50000 \
  -v ~/jenkins_home:/var/jenkins_home \
  -v ~/docker-certs-jk:/certs/client:ro \
  jenkins-new:v1
Enter fullscreen mode Exit fullscreen mode

Check our result:

➜  jenkins git:(main) βœ— docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED        STATUS         PORTS                                                                                      NAMES
d5609c0f9f69   jenkins-new:v1   "/sbin/tini -- /usr/…"   18 hours ago   Up 9 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins
339877c8ca20   docker:dind      "dockerd-entrypoint.…"   18 hours ago   Up 5 seconds   2375/tcp, 0.0.0.0:2376->2376/tcp, :::2376->2376/tcp                                        jenkins-docker
Enter fullscreen mode Exit fullscreen mode

Now, we need to config Jenkins after installation, let access the dashboard at localhost:8080, and unlock jenkins using password:



Follow the tutorial, we can take the password at /var/lib/jenkins/secrets/initialAdminPassword

CONTAINER ID   IMAGE            COMMAND                  CREATED        STATUS          PORTS                                                                                      NAMES
d5609c0f9f69   jenkins-new:v1   "/sbin/tini -- /usr/…"   19 hours ago   Up 29 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins
339877c8ca20   docker:dind      "dockerd-entrypoint.…"   19 hours ago   Up 29 minutes   2375/tcp, 0.0.0.0:2376->2376/tcp, :::2376->2376/tcp                                        jenkins-docker
➜  jenkins git:(main) βœ— docker exec -it d5 bash
jenkins@d5609c0f9f69:/$ cat /var/lib/jenkins/secrets/initialAdminPassword
YOUR_PASSWORD_IN_HERE
Enter fullscreen mode Exit fullscreen mode

After unlock jenkins, the Customize Jenkins page appears. We choose Install suggested plugins, and Create Admin User. Jenkins ready to use 🀟 🀟 🀟.



And we can install BlueOcean plugins (GUI for CI/CD Pipeline)



OK Done !!! Thanks you for reading my article πŸ₯°πŸ₯°πŸ₯°

Shopping on my store πŸ₯°πŸ₯°πŸ₯°

References

Top comments (0)