
Building Docker Images using Jenkins running as a Docker container | Docker within Docker | DevOps
Building Docker Images using Jenkins running as a Docker container | Docker within Docker | DevOps
This tutorial demonstrates how to run Jenkins as Docker container and build Docker images of applications using Jenkins. Building Docker images using Jenkins. Running Jenkins as Docker container. #SpringBoot #Jenkins #Docker #DockerJenkins #JenkinsOnDocker
If you liked this video please do subscribe and press the bell icon so that you are notified when I publish any new video.
Please feel free to post any questions you might have related to Docker, Jenkins or Spring boot and I would be more than happy to help.
Flutter with Spring Boot playlist: • Connecting Flutter with Spring Boot R…
Content
0 -> when it comes to ci/cd tools jenkins is one of
the most popular tools available in the market
6.96 -> jenkins can be run on dockker and
running jenkins on docker is a cakewalk
11.76 -> all you have to do is run the docker run command
and then you're good to go once the application
19.04 -> is up you can then create jobs pipelines to build
tests deploy your application and do all kinds of
25.84 -> activities building docker image of an
application from jenkins running a as a
32.8 -> docker container is a little tricky hi my name
is pratap and in today's video we will see
39.36 -> how to build an image of an application
with jenkins running in a docker container
57.12 -> i'm running docker on windows and uh this
is windows 10 i'm running docker desktop
64.8 -> on windows let us spin up a jenkins instance as
a docker container and for that the command is
72.24 -> under normal docker run command here i
have named the container as jenkins-lts
79.76 -> and i'm running this on port uh at port
8080 this is the volume that i have mounted
87.6 -> this is the volume on my local system and i have
mounted that to the container and let's hit enter
98.96 -> and the container is started let's give it a
minute or two until um the instances instance is
106.48 -> up and running then we'll go ahead
and log in to jenkins i have already
116.16 -> created a jenkins account and i've already
stored it on my local i will go ahead and
123.84 -> log in with the credentials that
i have already created okay now i
141.76 -> let's try to access jenkin um on my local at port
8080 so i have typed in localhost 8080 i provided
151.92 -> my user id and password and clicking on sign
in okay i have already created a simple uh
161.36 -> jenkins job let's see the details
of the job if i click on configure
168 -> it will take me to the configuration page
where we will see what i have written
177.36 -> okay this is the simple job i've done
given a small description and if i go down
187.68 -> to the button i'm only running a single
command this is the goal i'm trying to
194.96 -> build a simple spring boot application uh
spring spring boot 2.3 plus has this ability
205.44 -> that you can you do not have to explicitly
write a docker file you can simply type in
211.76 -> this command spring boot build image and
that's that is sufficient to build a docker
218.88 -> image that's what i i have done let us save
it and build the image if i click on build now
229.76 -> here's the build let's click on the build history
and if i click on control output that will show
239.68 -> us the output let me zoom in a bit so that you can
see it easily okay i think this should suffice the
255.76 -> building process has started and it has compiled
tested and now then jenkins is building the image
266.48 -> and as you can see build failed with error failed
to execute goal and this is trying to connect to
276.08 -> docker daemon that is running on my host machine
so this is the error you can see i'm getting
284.64 -> in the next step we'll see how to
mitigate this error and we'll see
290.8 -> how to fix it when using docker desktop a vm
running the docker demand is installed command
298.64 -> such as docker run docker ps etc are passed from
the cli to the docker daemon running in the vm
310.08 -> so in this figure you can see that this is the
docker demon and inside this docker there are
315.6 -> multiple containers running and we have a cli
from cli we can now pass command such as docker
328.56 -> can process those commands and respond
accordingly if i go to the command prompt and run
336.48 -> other version command let me clear out the
screen first and then let me run the command
360.16 -> docker version command shows that we have on the
docker engine that is comprised comprises of a
368.96 -> client and server okay server is nothing but
the daemon and client is nothing but the cli
378 -> there is a clear distinction
between the client and the server
381.84 -> okay um so if we go back to the slide the that
is the same thing happening here we are sending
389.76 -> commands from docker cli to docker daemon
and docker daemon is responding accordingly
396.48 -> so in our case we will have to devise a way
in such that the container in which jenkins
406.64 -> is running should be able to communicate with the
docker daemon that is running on the host machine
413.76 -> okay so we have a couple of tasks to do to
achieve that communication right so first
423.36 -> thing is we will have to install at the docker cli
in the jenkins container second thing is we will
431.92 -> have to communicate with the docker
daemon running on the host machine
436.8 -> the final part will be to establish a way and
also grant appropriate permission to the container
445.28 -> so that it can talk to the daemon so for that we
will have to follow a couple of steps first thing
453.36 -> we will have to create a docker file as as um
depicted here um this is that we will build the
463.04 -> another image another custom image from jenkins
lts and we will use a root user and we will use
474.4 -> this command to install docker cli with user
jenkins the second step will be we will have to
482.08 -> run the docker build command to build uh this
docker file i mean that will build the image
490.72 -> finally we will have to once once the image
is ready we will have to run the image meaning
498.4 -> we will have to spin up the container by running
docker run command with following options
506.4 -> we will have to provide um var run
docker shock meaning we will have to
514.72 -> bind the volume so let's talk about
a docker sock file it's a unix file
522.32 -> docker daemon actually listens to this file
and responds to all the commands that are
528.08 -> sent through cli this is the way through which
our jenkins container will communicate with the
536.24 -> docker daemon that is running on our um host
okay i have already built um i mean i have
547.68 -> already prepared this a docker file let's go ahead
and run the build command and see how it goes
557.76 -> moving on to the
561.2 -> command prompt
578.72 -> this is where i have the docker file
present and let me run the command
582.96 -> here okay the image is built let's see if
the image is present in the in our docker
605.36 -> okay so this is jenkins in docker uh
was the image name we provided and the
612.96 -> images already present here next
thing is let's go ahead and run this
620.32 -> image and see what happens so this is the
command let me copy this command from here
638.16 -> i'm going to spin up the container
and as you can see i am mounting
645.12 -> docker sock using volume command and this
is the volume where i have all the um
652.64 -> docker related jenkins related information
that is residing on my local machine
659.12 -> okay if i go ahead and run it okay let us give
it a different name looks like there is some
666.96 -> other container running with this name one thing
to notice here is 0 option in the command that
677.52 -> is used to add the user with which the image
was created to the root group of the container
687.04 -> that is done in order to get access to the docker
daemon that is running on the host system and
698.32 -> that contains docker dot sock file and that is
not uh usually that is not accessible to all
707.12 -> the users only root users can access that file so
we are adding group 0 so that the user with which
718.08 -> the docker uh image of jenkins was created
that can communicate with the daemon
725.2 -> the container is running let's give it a
minute or two to then we will go ahead and
733.12 -> run our build job the container is running
on localhost 8080 let me try go ahead and
744.08 -> that url right the docker container
is now up let me log in with my
752.48 -> credentials so i provided my
credentials and i'm logging into
762.96 -> the container moment of truth let's go
ahead and run this job and see what happens
781.12 -> let's go to the control output of this job and say
792.16 -> jenkins is building the image
796.88 -> bingo there you go there you go the build
is successful and docker image is created
805.92 -> this is the image that is created just now
809.44 -> to prove my point let's go to the command
prompt and see if the image is really created
817.28 -> let me exit from here and if i clear the screen
826.56 -> type in the command docker image images
832.72 -> yes here is the image that was created just now
849.2 -> congratulations you are ready to rock and roll
with this image you can push this image to
858.72 -> docker hub and do all kind of activities that
you want to do thank you for watching this video
866.24 -> and please hit the like button
if you like the video and
873.28 -> also if you have any comments please do not
hesitate to comment on my video thank you so much
Source: https://www.youtube.com/watch?v=h15Mh9FDMLo