SlideShare a Scribd company logo
How to Dockerize Web Application using Docker Compose
Enhancing the application development process in all its phases—building, scaling, shipping, deploying
and running—plays a vital role in today’s competitive IT industry by shortening the time between writing
code and running it. Moreover, the methodologies of DevOps and such container virtualization tech-
nologies as Docker make adopting microservice architecture style with reduced risk and complexity vir-
tually effortless. It is significantly easier to achieve the state of continuous deployment, monitoring and
delivery using Docker.
Before we look into the steps of dockerizing web applications, let us quickly understand some of
Docker’s fundamentals.
Shipping an application into containers is popularly known as “Dockerizing”. Dockerizing offers several
substantial benefits. Here are some ways Docker container technology proves beneficial in day-to-day
software development and testing:
Containers provide an isolated and secure
application platform for running an applica-
tion. They also isolate applications from one
another and the underlying infrastructure,
while providing an added layer of protec-
tion for the application.
Containers can help eliminate a lot of
issues related to configuration, environment
setup, application setup and more. Most of
these issues tend to occur due to configu-
ration differences in development, testing
and production environment stages, and
cause the deployment to fail.
Containers enhance the overall process of
developing, shipping, testing and deploying
the code in different environments, and
make the process very convenient for
various stakeholders. This convenience
creates self-service development and
testing environments, and enhances overall
productivity of software developers and testproductivity of software developers and test
engineers.
Copyright © 2016 Evoke Technologies. All rights reserved 1
Docker Client
Containers Containers
Docker Host
Docker Daemon
Docker build
Docker pull
Docker run
Docker Registry
Tomcat
Ubuntu
CentOS
The diagram below represents a high level architecture of Docker, showing these key Docker building
blocks:
Docker Client
Docker Images
Docker Daemon
Docker Containers
Docker Registry
Copyright © 2016 Evoke Technologies. All rights reserved 2
------------
---------------
----------
---------------
----------------------------
---------------------
-----------------------------------
..............
...
.........
......
....
Here are some of the common commands one would come across while working with Docker images:
One of the biggest advantages of using Docker containers is the creation of self-service development
and test environments, along with the deployment of software packages. To realize this advantage,
one must first figure out distinct ways in which Docker containers representing multiple application
components (web servers, hosting web application and services, databases and so on) can be
orchestrated.
Two approaches for orchestrating multiple containers to create self-service development and testing
environments are:
In this white paper, we will demonstrate how to use Docker compose to orchestrate multiple contain-
ers for creating self-service development/test environments.
The application use case demonstrated in this paper is a Java-based web application that calls a
microservice to retrieve data from MongoDB. A traditional scenario would use dedicated software
development and testing environments that need to be configured as appropriate whenever new
releases are made. This white paper will demonstrate the following, Dockerized method:
We will use Docker compose to orchestrate these containers. The outline below represents required
steps in dockerizing a RESTful web service built using a Spring Boot application.
Docker containers with configuration management tools such as Ansible/Chef/Puppet
Docker compose tool to orchestrate Docker containers
A Java web application will run within a Docker container. This web application will invoke a Spring
Boot microservice.
The Spring Boot microservice will run within another container. This RESTful service preserves its data
in MongoDB.
The MongoDB will run within another container.
Used to build images using
the instructions from
Dockerfile.
Used to fetch the Docker
image from the Docker regis-
tries. In the example shown in
this white paper, the Docker
client interacts with Docker
registries via the Docker
daemon to pull the existing
CentOS image.CentOS image.
Copyright © 2016 Evoke Technologies. All rights reserved 3
Build a Maven-based Spring Boot employee microservice RESTful application. The service will be
exposed over a certain URI (Uniform Resource Identifier). The service saves the data in MongoDB that
runs in another container. Build a WAR file of the above application and place it in a desired location,
specified in the Dockerfile.
To run the application in a Docker container, create a Dockerfile consisting of a set of instructions to
build the image. Once the Dockerfile is created, it could be used to build an image for this service.
Copyright © 2016 Evoke Technologies. All rights reserved 4
Here is a sample Dockerfile representing the image of this service.
Note these important points about the Dockerfile above:
FROM java:8
MAINTAINER apandiri@evoketechnologies.com
VOLUME /tmp
ADD build/libs/ microservice-employee-service.jar app.jar
EXPOSE 8181
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongodb/micros", "-ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongodb/micros", "-
Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
[“java”,"-Dspring.data.mongodb.uri=mongodb://mongodb/micros" ,“-Djava.security.egd=-
file:/dev/./urandom”,“-jar”,“/app.jar”]: execute our fat-jar (urandom is for Tomcat source of entropy)
"-Dspring.data.mongodb.uri=mongodb://mongodb/micros", this environment variable for connecting
to mongodb service which we are going to create using Docker-Compose and the data base name
is micros.
A variable dev/./urandom added to reduce the tomcat start time /app.jar is our jar file to be run.
Djava.security.egd=file:/dev/./urandom for running Spring Boot application
Dockerfile consists of a set of instructions to build an image.
As represented in the diagram above, the build command is used to build an image A, per the
instruction provided in Dockerfile. Additionally, the image A can be pushed in Docker hub using the
push command.
The pushed image A can be fetched using the Docker pull command.
A container can be created from the run command. The above illustration depicts how the run
command was used to create container A from the image A.
Operations that can be performed on container A include start, stop and restart
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-----------------------------------
-----------------------------------
----------------------------------
- - -
Start, Stop, Restart
Commit
Build
Run
Pull
Push
Copyright © 2016 Evoke Technologies. All rights reserved 5
Docker Host
Repository
Image A
Docker Hub
Docker Daemon
Image A
Container ADocker File
Dockerizing a Spring web application would simply mean starting a Spring web application within a
Docker container. One of the key benefits of this approach is that one could build an image once
and then start the Spring web application container as and when required for development and
training purposes. In cases where the Spring web application is part of a bigger enterprise applica-
tion, it brings a lot of benefits in terms of self-service, on-demand development and testing setup,
thereby enhancing the overall productivity of software developers and test engineers.
In this white paper, we have shown how one can build a maven-based Spring web application that
runs on Tomcat. For this, one would be required to build a WAR file and place it in a desired location
(by default, webapps) under Tomcat installation.
$ docker build –t <username>/
<Repositoryname>:<tagname>.
Specifying the <username>/<Repositoryname>
:<tagname> as employee and “.”to look for
Dockerfile in the current directory.
$ docker images
$ docker run –d –name container_name
image_name
$ docker exec -it container_name /bin/bash
$ docker ps
$ docker ps -a
$ docker stop $(docker ps)
$ docker rm $(docker ps -a)
$ docker rmi $(docker images)
FROM tomcat
MAINTAINER apandiri@evoketechnologies.com
ADD build/libs/ microservice-employee-web.war /usr/local/tomcat/webapps/
EXPOSE 8989
CMD ["catalina.sh", "run"]
Copyright © 2016 Evoke Technologies. All rights reserved 6
Dockerizing MongoDB would mean starting a MongoDB within a Docker container. This is accom-
plished using one of the following methods:
In most cases, the first method would suffice. The following commands represent the steps to docker-
ize MongoDB:
Using the Docker compose technique, one could easily start MongoDB within a container and also
link it with other containers. Take a look at the command below:
# Usage: docker pull <user-name>/<repository>
$ docker pull mongo
# Usage: docker build –t <user-name>/<repository> <Dockerfile_location>
$ docker build –t mongo .
# dot “.”defines the Dockerfile in current directory location
# Usage: docker run - p <port mapping> --name <name for container> -d <user-name>/<repository>
$ docker run -p 27017:27017 --name mongo_container -d mongo_image
version: '2'
services:
#Creating MongoDB container from mongo image
mongodb:
image: mongo
container_name: mongodb
expose:expose:
- "27017"
Using Docker compose, one can orchestrate more than one container. The following can be defined
in a YAML file in relation with running multiple containers:
Pulling a MongoDB image directly from the public Docker registry and running a container using
this image.
Building a custom MongoDB image using Dockerfile and then running a container using this
image.
Copyright © 2016 Evoke Technologies. All rights reserved 7
To demonstrate the benefits of Docker compose, the example below specifies three containers,
namely employee, web app and MongoDB containers in a docker-compose.yml file.
Docker Compose file defines services which get started in an interactive mode using “docker-com-
pose up”command. Based on the order the dependencies are declared under “depends_on”in the
docker-compose.yml file, the chosen service, starts first followed by others. In docker-compose file
shown below, the service creation order will be first MongoDB, followed by employee service and
To run all the containers at once interactively and also to find out in which order containers are being
created, use the below command and use –d to start all the containers in the background:
To monitor log output of all the containers, make use of the following command:
$ docker-compose up
$ docker-compose up –d
$ docker-compose logs
In order to stop the running containers, one could use the command given below. Further, it should
be noted that the order of exiting the containers is in the reverse order of their creation.
Specify images,
Specify configurations,
Specify how containers will link,
Specify container dependencies
Specify all ports that needed to be exposed
Copyright © 2016 Evoke Technologies. All rights reserved 8
version: '2'
services:
# Dockerized employee microservice container for exposing services
employee:
build: employee/
dockerfile: Employee_Dockerfile
container_name: employeecontainer_name: employee
ports:
- "8181:8080"
depends_on:
- mongodb
#MongoDB container
mongodb:
image: mongoimage: mongo
container_name: mongodb
expose:
- "27017"
#Dockerized webapp container acting as external web client for consuming restful web services
webapp:
build: webapp/
dockerfile: Webapp_Dockerfiledockerfile: Webapp_Dockerfile
container_name: webapp
ports:
- "8989:8080"
depends_on:
- employee
$ docker-compose stop
$ docker-compose rm --all
To remove all the containers
Copyright © 2016 Evoke Technologies. All rights reserved 9
example quoted above MongoDB and employee containers will be created first and subsequently
webapp is created.
Here MongoDB container is created by consuming the Mongo image published by another in Docker
hub and this will get exposed on port 27017. Navigate to the folder where docker-compose.yml file, all
the respective dockerfiles and JAR files of webapp and RESTful services application have been placed.
Copyright © 2016 Evoke Technologies. All rights reserved
Stay Connected: /EvokeTechnologies | /EvokeUS | /company/evoke-technologies | /+EvoketechnologiesUS
7106 Corporate Way, Dayton, OH - 45459, United States
Sales: +1 (937) 660-4925
Email: sales@evoketechnologies.com
10
Ad

Recommended

Docker and the Container Ecosystem
Docker and the Container Ecosystem
psconnolly
 
A Hands-on Introduction to Docker
A Hands-on Introduction to Docker
CodeOps Technologies LLP
 
Docker Introductory workshop
Docker Introductory workshop
Runcy Oommen
 
Using Docker in the Real World
Using Docker in the Real World
Tim Haak
 
Docker
Docker
Cary Gordon
 
Docker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12X
Jérôme Petazzoni
 
Solving Real World Production Problems with Docker
Solving Real World Production Problems with Docker
Marc Campbell
 
Docker puebla bday #4 celebration
Docker puebla bday #4 celebration
Ramon Morales
 
Introduction To Docker
Introduction To Docker
Dr. Syed Hassan Amin
 
Docker
Docker
Chen Chun
 
Docker by Example - Quiz
Docker by Example - Quiz
CodeOps Technologies LLP
 
Learn docker in 90 minutes
Learn docker in 90 minutes
Larry Cai
 
Docker from A to Z, including Swarm and OCCS
Docker from A to Z, including Swarm and OCCS
Frank Munz
 
Docker by Example - Basics
Docker by Example - Basics
CodeOps Technologies LLP
 
Docker 101 - Intro to Docker
Docker 101 - Intro to Docker
Adrian Otto
 
Docker - The Linux Container
Docker - The Linux Container
Balaji Rajan
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken Cochrane
dotCloud
 
Architecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based Deployments
Ben Hall
 
Introducing Docker
Introducing Docker
Francesco Pantano
 
Docker 101 @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016
Walid Shaari
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
RightScale
 
Docker - From Walking To Running
Docker - From Walking To Running
Giacomo Vacca
 
Building Reusable Development Environments with Docker
Building Reusable Development Environments with Docker
Revelation Technologies
 
Docker fundamentals
Docker fundamentals
Alper Unal
 
Docker for developers
Docker for developers
andrzejsydor
 
docker installation and basics
docker installation and basics
Walid Ashraf
 
Introduction to Docker and deployment and Azure
Introduction to Docker and deployment and Azure
Jérôme Petazzoni
 
The state of the swarm
The state of the swarm
Mathieu Buffenoir
 
Running the Oracle SOA Suite Environment in a Docker Container
Running the Oracle SOA Suite Environment in a Docker Container
Guido Schmutz
 
Microservices with Docker
Microservices with Docker
Venkata Naga Ravi
 

More Related Content

What's hot (20)

Introduction To Docker
Introduction To Docker
Dr. Syed Hassan Amin
 
Docker
Docker
Chen Chun
 
Docker by Example - Quiz
Docker by Example - Quiz
CodeOps Technologies LLP
 
Learn docker in 90 minutes
Learn docker in 90 minutes
Larry Cai
 
Docker from A to Z, including Swarm and OCCS
Docker from A to Z, including Swarm and OCCS
Frank Munz
 
Docker by Example - Basics
Docker by Example - Basics
CodeOps Technologies LLP
 
Docker 101 - Intro to Docker
Docker 101 - Intro to Docker
Adrian Otto
 
Docker - The Linux Container
Docker - The Linux Container
Balaji Rajan
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken Cochrane
dotCloud
 
Architecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based Deployments
Ben Hall
 
Introducing Docker
Introducing Docker
Francesco Pantano
 
Docker 101 @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016
Walid Shaari
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
RightScale
 
Docker - From Walking To Running
Docker - From Walking To Running
Giacomo Vacca
 
Building Reusable Development Environments with Docker
Building Reusable Development Environments with Docker
Revelation Technologies
 
Docker fundamentals
Docker fundamentals
Alper Unal
 
Docker for developers
Docker for developers
andrzejsydor
 
docker installation and basics
docker installation and basics
Walid Ashraf
 
Introduction to Docker and deployment and Azure
Introduction to Docker and deployment and Azure
Jérôme Petazzoni
 
The state of the swarm
The state of the swarm
Mathieu Buffenoir
 
Learn docker in 90 minutes
Learn docker in 90 minutes
Larry Cai
 
Docker from A to Z, including Swarm and OCCS
Docker from A to Z, including Swarm and OCCS
Frank Munz
 
Docker 101 - Intro to Docker
Docker 101 - Intro to Docker
Adrian Otto
 
Docker - The Linux Container
Docker - The Linux Container
Balaji Rajan
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken Cochrane
dotCloud
 
Architecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based Deployments
Ben Hall
 
Docker 101 @KACST Saudi HPC 2016
Docker 101 @KACST Saudi HPC 2016
Walid Shaari
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
RightScale
 
Docker - From Walking To Running
Docker - From Walking To Running
Giacomo Vacca
 
Building Reusable Development Environments with Docker
Building Reusable Development Environments with Docker
Revelation Technologies
 
Docker fundamentals
Docker fundamentals
Alper Unal
 
Docker for developers
Docker for developers
andrzejsydor
 
docker installation and basics
docker installation and basics
Walid Ashraf
 
Introduction to Docker and deployment and Azure
Introduction to Docker and deployment and Azure
Jérôme Petazzoni
 

Viewers also liked (20)

Running the Oracle SOA Suite Environment in a Docker Container
Running the Oracle SOA Suite Environment in a Docker Container
Guido Schmutz
 
Microservices with Docker
Microservices with Docker
Venkata Naga Ravi
 
Mule soft esb – data validation best practices
Mule soft esb – data validation best practices
alfa
 
Dockerized tests with dockerized jenkins
Dockerized tests with dockerized jenkins
Fernando Valverde
 
IBM Container Service Overview
IBM Container Service Overview
Kyle Brown
 
Integration Testing with Docker Containers with DockerCompose
Integration Testing with Docker Containers with DockerCompose
Mike Holdsworth
 
DEPLOYING A DOCKERIZED DISTRIBUTED APPLICATION IN MESOS
DEPLOYING A DOCKERIZED DISTRIBUTED APPLICATION IN MESOS
Julia Mateo
 
Dockerize it all
Dockerize it all
Puneet Behl
 
SDLC Using Docker for Fun and Profit
SDLC Using Docker for Fun and Profit
dantheelder
 
Micro services and Containers
Micro services and Containers
Richard Harvey
 
Monitoring docker container and dockerized applications
Monitoring docker container and dockerized applications
Ananth Padmanabhan
 
Docker Practical Use Cases
Docker Practical Use Cases
Alexei Yuzhakov
 
Dockerize All The Things
Dockerize All The Things
Chris Tankersley
 
Dockerize WordPress on Mac/Windows
Dockerize WordPress on Mac/Windows
Kite Koga
 
Modern DevOps with Docker
Modern DevOps with Docker
Shippable
 
Container as a Service with Docker
Container as a Service with Docker
Patrick Chanezon
 
I tried to dockerize my app but I had to PaaS
I tried to dockerize my app but I had to PaaS
Jorge Morales
 
Immutable infrastructure with Docker and EC2
Immutable infrastructure with Docker and EC2
dotCloud
 
How Docker Fits into DevOps Ecosystem
How Docker Fits into DevOps Ecosystem
Edureka!
 
CI/CD with Docker, DC/OS, and Jenkins
CI/CD with Docker, DC/OS, and Jenkins
Karl Isenberg
 
Running the Oracle SOA Suite Environment in a Docker Container
Running the Oracle SOA Suite Environment in a Docker Container
Guido Schmutz
 
Mule soft esb – data validation best practices
Mule soft esb – data validation best practices
alfa
 
Dockerized tests with dockerized jenkins
Dockerized tests with dockerized jenkins
Fernando Valverde
 
IBM Container Service Overview
IBM Container Service Overview
Kyle Brown
 
Integration Testing with Docker Containers with DockerCompose
Integration Testing with Docker Containers with DockerCompose
Mike Holdsworth
 
DEPLOYING A DOCKERIZED DISTRIBUTED APPLICATION IN MESOS
DEPLOYING A DOCKERIZED DISTRIBUTED APPLICATION IN MESOS
Julia Mateo
 
Dockerize it all
Dockerize it all
Puneet Behl
 
SDLC Using Docker for Fun and Profit
SDLC Using Docker for Fun and Profit
dantheelder
 
Micro services and Containers
Micro services and Containers
Richard Harvey
 
Monitoring docker container and dockerized applications
Monitoring docker container and dockerized applications
Ananth Padmanabhan
 
Docker Practical Use Cases
Docker Practical Use Cases
Alexei Yuzhakov
 
Dockerize WordPress on Mac/Windows
Dockerize WordPress on Mac/Windows
Kite Koga
 
Modern DevOps with Docker
Modern DevOps with Docker
Shippable
 
Container as a Service with Docker
Container as a Service with Docker
Patrick Chanezon
 
I tried to dockerize my app but I had to PaaS
I tried to dockerize my app but I had to PaaS
Jorge Morales
 
Immutable infrastructure with Docker and EC2
Immutable infrastructure with Docker and EC2
dotCloud
 
How Docker Fits into DevOps Ecosystem
How Docker Fits into DevOps Ecosystem
Edureka!
 
CI/CD with Docker, DC/OS, and Jenkins
CI/CD with Docker, DC/OS, and Jenkins
Karl Isenberg
 
Ad

Similar to How to Dockerize Web Application using Docker Compose (20)

Docker - A lightweight Virtualization Platform for Developers
Docker - A lightweight Virtualization Platform for Developers
RapidValue
 
Docker: A New Way to Turbocharging Your Apps Development
Docker: A New Way to Turbocharging Your Apps Development
msyukor
 
Docker Basic to Advance
Docker Basic to Advance
Paras Jain
 
Docker
Docker
Abhishek Tomar
 
Continuous Delivery with Docker and Jenkins pipeline
Continuous Delivery with Docker and Jenkins pipeline
Slam Han
 
Docker @ Atlogys
Docker @ Atlogys
Atlogys Technical Consulting
 
Bring Continuous Integration to Your Laptop With the Drone CI Docker Extensio...
Bring Continuous Integration to Your Laptop With the Drone CI Docker Extensio...
jemije2490
 
Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2
Binary Studio
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
양재동 코드랩
 
Overview of Docker
Overview of Docker
GauranG Bajpai
 
Docker interview Questions-2.pdf
Docker interview Questions-2.pdf
Yogeshwaran R
 
Docker for Developers
Docker for Developers
JasonStraughan1
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2
Binary Studio
 
Axigen on docker
Axigen on docker
BUSINESS SOFTWARES & SOLUTIONS
 
Docker and Springboot by Clavrit Digital Solutions
Docker and Springboot by Clavrit Digital Solutions
Clavrit Digital Solutions
 
tips for generating docker containers complaints with the devsecops
tips for generating docker containers complaints with the devsecops
Thierry Gayet
 
Dockerfiles building docker images automatically v (workdir, env, add, and ...
Dockerfiles building docker images automatically v (workdir, env, add, and ...
ansonjonel
 
How to Dockerize your Sitecore module
How to Dockerize your Sitecore module
Mihály Árvai
 
HPC Cloud Burst Using Docker
HPC Cloud Burst Using Docker
IRJET Journal
 
[@NaukriEngineering] Docker 101
[@NaukriEngineering] Docker 101
Naukri.com
 
Docker - A lightweight Virtualization Platform for Developers
Docker - A lightweight Virtualization Platform for Developers
RapidValue
 
Docker: A New Way to Turbocharging Your Apps Development
Docker: A New Way to Turbocharging Your Apps Development
msyukor
 
Docker Basic to Advance
Docker Basic to Advance
Paras Jain
 
Continuous Delivery with Docker and Jenkins pipeline
Continuous Delivery with Docker and Jenkins pipeline
Slam Han
 
Bring Continuous Integration to Your Laptop With the Drone CI Docker Extensio...
Bring Continuous Integration to Your Laptop With the Drone CI Docker Extensio...
jemije2490
 
Academy PRO: Docker. Lecture 2
Academy PRO: Docker. Lecture 2
Binary Studio
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
양재동 코드랩
 
Docker interview Questions-2.pdf
Docker interview Questions-2.pdf
Yogeshwaran R
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2
Binary Studio
 
Docker and Springboot by Clavrit Digital Solutions
Docker and Springboot by Clavrit Digital Solutions
Clavrit Digital Solutions
 
tips for generating docker containers complaints with the devsecops
tips for generating docker containers complaints with the devsecops
Thierry Gayet
 
Dockerfiles building docker images automatically v (workdir, env, add, and ...
Dockerfiles building docker images automatically v (workdir, env, add, and ...
ansonjonel
 
How to Dockerize your Sitecore module
How to Dockerize your Sitecore module
Mihály Árvai
 
HPC Cloud Burst Using Docker
HPC Cloud Burst Using Docker
IRJET Journal
 
[@NaukriEngineering] Docker 101
[@NaukriEngineering] Docker 101
Naukri.com
 
Ad

Recently uploaded (20)

Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
Daily Lesson Log MATATAG ICT TEchnology 8
Daily Lesson Log MATATAG ICT TEchnology 8
LOIDAALMAZAN3
 
10 Key Challenges for AI within the EU Data Protection Framework.pdf
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Safe Software
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
"Database isolation: how we deal with hundreds of direct connections to the d...
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
WebdriverIO & JavaScript: The Perfect Duo for Web Automation
digitaljignect
 
Daily Lesson Log MATATAG ICT TEchnology 8
Daily Lesson Log MATATAG ICT TEchnology 8
LOIDAALMAZAN3
 
10 Key Challenges for AI within the EU Data Protection Framework.pdf
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
OpenPOWER Foundation & Open-Source Core Innovations
OpenPOWER Foundation & Open-Source Core Innovations
IBM
 
cnc-processing-centers-centateq-p-110-en.pdf
cnc-processing-centers-centateq-p-110-en.pdf
AmirStern2
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
The Future of Product Management in AI ERA.pdf
The Future of Product Management in AI ERA.pdf
Alyona Owens
 
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Safe Software
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
AI Agents and FME: A How-to Guide on Generating Synthetic Metadata
Safe Software
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 

How to Dockerize Web Application using Docker Compose

  • 2. Enhancing the application development process in all its phases—building, scaling, shipping, deploying and running—plays a vital role in today’s competitive IT industry by shortening the time between writing code and running it. Moreover, the methodologies of DevOps and such container virtualization tech- nologies as Docker make adopting microservice architecture style with reduced risk and complexity vir- tually effortless. It is significantly easier to achieve the state of continuous deployment, monitoring and delivery using Docker. Before we look into the steps of dockerizing web applications, let us quickly understand some of Docker’s fundamentals. Shipping an application into containers is popularly known as “Dockerizing”. Dockerizing offers several substantial benefits. Here are some ways Docker container technology proves beneficial in day-to-day software development and testing: Containers provide an isolated and secure application platform for running an applica- tion. They also isolate applications from one another and the underlying infrastructure, while providing an added layer of protec- tion for the application. Containers can help eliminate a lot of issues related to configuration, environment setup, application setup and more. Most of these issues tend to occur due to configu- ration differences in development, testing and production environment stages, and cause the deployment to fail. Containers enhance the overall process of developing, shipping, testing and deploying the code in different environments, and make the process very convenient for various stakeholders. This convenience creates self-service development and testing environments, and enhances overall productivity of software developers and testproductivity of software developers and test engineers. Copyright © 2016 Evoke Technologies. All rights reserved 1
  • 3. Docker Client Containers Containers Docker Host Docker Daemon Docker build Docker pull Docker run Docker Registry Tomcat Ubuntu CentOS The diagram below represents a high level architecture of Docker, showing these key Docker building blocks: Docker Client Docker Images Docker Daemon Docker Containers Docker Registry Copyright © 2016 Evoke Technologies. All rights reserved 2 ------------ --------------- ---------- --------------- ---------------------------- --------------------- ----------------------------------- .............. ... ......... ...... ....
  • 4. Here are some of the common commands one would come across while working with Docker images: One of the biggest advantages of using Docker containers is the creation of self-service development and test environments, along with the deployment of software packages. To realize this advantage, one must first figure out distinct ways in which Docker containers representing multiple application components (web servers, hosting web application and services, databases and so on) can be orchestrated. Two approaches for orchestrating multiple containers to create self-service development and testing environments are: In this white paper, we will demonstrate how to use Docker compose to orchestrate multiple contain- ers for creating self-service development/test environments. The application use case demonstrated in this paper is a Java-based web application that calls a microservice to retrieve data from MongoDB. A traditional scenario would use dedicated software development and testing environments that need to be configured as appropriate whenever new releases are made. This white paper will demonstrate the following, Dockerized method: We will use Docker compose to orchestrate these containers. The outline below represents required steps in dockerizing a RESTful web service built using a Spring Boot application. Docker containers with configuration management tools such as Ansible/Chef/Puppet Docker compose tool to orchestrate Docker containers A Java web application will run within a Docker container. This web application will invoke a Spring Boot microservice. The Spring Boot microservice will run within another container. This RESTful service preserves its data in MongoDB. The MongoDB will run within another container. Used to build images using the instructions from Dockerfile. Used to fetch the Docker image from the Docker regis- tries. In the example shown in this white paper, the Docker client interacts with Docker registries via the Docker daemon to pull the existing CentOS image.CentOS image. Copyright © 2016 Evoke Technologies. All rights reserved 3
  • 5. Build a Maven-based Spring Boot employee microservice RESTful application. The service will be exposed over a certain URI (Uniform Resource Identifier). The service saves the data in MongoDB that runs in another container. Build a WAR file of the above application and place it in a desired location, specified in the Dockerfile. To run the application in a Docker container, create a Dockerfile consisting of a set of instructions to build the image. Once the Dockerfile is created, it could be used to build an image for this service. Copyright © 2016 Evoke Technologies. All rights reserved 4 Here is a sample Dockerfile representing the image of this service. Note these important points about the Dockerfile above: FROM java:8 MAINTAINER [email protected] VOLUME /tmp ADD build/libs/ microservice-employee-service.jar app.jar EXPOSE 8181 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongodb/micros", "-ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongodb/micros", "- Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 6. [“java”,"-Dspring.data.mongodb.uri=mongodb://mongodb/micros" ,“-Djava.security.egd=- file:/dev/./urandom”,“-jar”,“/app.jar”]: execute our fat-jar (urandom is for Tomcat source of entropy) "-Dspring.data.mongodb.uri=mongodb://mongodb/micros", this environment variable for connecting to mongodb service which we are going to create using Docker-Compose and the data base name is micros. A variable dev/./urandom added to reduce the tomcat start time /app.jar is our jar file to be run. Djava.security.egd=file:/dev/./urandom for running Spring Boot application Dockerfile consists of a set of instructions to build an image. As represented in the diagram above, the build command is used to build an image A, per the instruction provided in Dockerfile. Additionally, the image A can be pushed in Docker hub using the push command. The pushed image A can be fetched using the Docker pull command. A container can be created from the run command. The above illustration depicts how the run command was used to create container A from the image A. Operations that can be performed on container A include start, stop and restart - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------- ----------------------------------- ---------------------------------- - - - Start, Stop, Restart Commit Build Run Pull Push Copyright © 2016 Evoke Technologies. All rights reserved 5 Docker Host Repository Image A Docker Hub Docker Daemon Image A Container ADocker File
  • 7. Dockerizing a Spring web application would simply mean starting a Spring web application within a Docker container. One of the key benefits of this approach is that one could build an image once and then start the Spring web application container as and when required for development and training purposes. In cases where the Spring web application is part of a bigger enterprise applica- tion, it brings a lot of benefits in terms of self-service, on-demand development and testing setup, thereby enhancing the overall productivity of software developers and test engineers. In this white paper, we have shown how one can build a maven-based Spring web application that runs on Tomcat. For this, one would be required to build a WAR file and place it in a desired location (by default, webapps) under Tomcat installation. $ docker build –t <username>/ <Repositoryname>:<tagname>. Specifying the <username>/<Repositoryname> :<tagname> as employee and “.”to look for Dockerfile in the current directory. $ docker images $ docker run –d –name container_name image_name $ docker exec -it container_name /bin/bash $ docker ps $ docker ps -a $ docker stop $(docker ps) $ docker rm $(docker ps -a) $ docker rmi $(docker images) FROM tomcat MAINTAINER [email protected] ADD build/libs/ microservice-employee-web.war /usr/local/tomcat/webapps/ EXPOSE 8989 CMD ["catalina.sh", "run"] Copyright © 2016 Evoke Technologies. All rights reserved 6
  • 8. Dockerizing MongoDB would mean starting a MongoDB within a Docker container. This is accom- plished using one of the following methods: In most cases, the first method would suffice. The following commands represent the steps to docker- ize MongoDB: Using the Docker compose technique, one could easily start MongoDB within a container and also link it with other containers. Take a look at the command below: # Usage: docker pull <user-name>/<repository> $ docker pull mongo # Usage: docker build –t <user-name>/<repository> <Dockerfile_location> $ docker build –t mongo . # dot “.”defines the Dockerfile in current directory location # Usage: docker run - p <port mapping> --name <name for container> -d <user-name>/<repository> $ docker run -p 27017:27017 --name mongo_container -d mongo_image version: '2' services: #Creating MongoDB container from mongo image mongodb: image: mongo container_name: mongodb expose:expose: - "27017" Using Docker compose, one can orchestrate more than one container. The following can be defined in a YAML file in relation with running multiple containers: Pulling a MongoDB image directly from the public Docker registry and running a container using this image. Building a custom MongoDB image using Dockerfile and then running a container using this image. Copyright © 2016 Evoke Technologies. All rights reserved 7
  • 9. To demonstrate the benefits of Docker compose, the example below specifies three containers, namely employee, web app and MongoDB containers in a docker-compose.yml file. Docker Compose file defines services which get started in an interactive mode using “docker-com- pose up”command. Based on the order the dependencies are declared under “depends_on”in the docker-compose.yml file, the chosen service, starts first followed by others. In docker-compose file shown below, the service creation order will be first MongoDB, followed by employee service and To run all the containers at once interactively and also to find out in which order containers are being created, use the below command and use –d to start all the containers in the background: To monitor log output of all the containers, make use of the following command: $ docker-compose up $ docker-compose up –d $ docker-compose logs In order to stop the running containers, one could use the command given below. Further, it should be noted that the order of exiting the containers is in the reverse order of their creation. Specify images, Specify configurations, Specify how containers will link, Specify container dependencies Specify all ports that needed to be exposed Copyright © 2016 Evoke Technologies. All rights reserved 8
  • 10. version: '2' services: # Dockerized employee microservice container for exposing services employee: build: employee/ dockerfile: Employee_Dockerfile container_name: employeecontainer_name: employee ports: - "8181:8080" depends_on: - mongodb #MongoDB container mongodb: image: mongoimage: mongo container_name: mongodb expose: - "27017" #Dockerized webapp container acting as external web client for consuming restful web services webapp: build: webapp/ dockerfile: Webapp_Dockerfiledockerfile: Webapp_Dockerfile container_name: webapp ports: - "8989:8080" depends_on: - employee $ docker-compose stop $ docker-compose rm --all To remove all the containers Copyright © 2016 Evoke Technologies. All rights reserved 9
  • 11. example quoted above MongoDB and employee containers will be created first and subsequently webapp is created. Here MongoDB container is created by consuming the Mongo image published by another in Docker hub and this will get exposed on port 27017. Navigate to the folder where docker-compose.yml file, all the respective dockerfiles and JAR files of webapp and RESTful services application have been placed. Copyright © 2016 Evoke Technologies. All rights reserved Stay Connected: /EvokeTechnologies | /EvokeUS | /company/evoke-technologies | /+EvoketechnologiesUS 7106 Corporate Way, Dayton, OH - 45459, United States Sales: +1 (937) 660-4925 Email: [email protected] 10