SlideShare a Scribd company logo
1 of 93
Docker
1
3
Why the buzz around Containers and
Docker?
•The software industry has changed
•Before:
• monolithic applications
• long development cycles
• single environment
• slowly scaling up
•Now:
• decoupled services
• fast, iterative improvements
• multiple environments
• quickly scaling out
3
Deployment becomes very complex
•Many different stacks:
• languages
• frameworks
• Databases
•Many different targets:
• individual development environments
• pre-production, QA, staging...
• production: on prem, cloud, hybrid
3
The deployment problem
3
Analogy with the shipping industry
3
Intermodal shipping containers
3
A new shipping ecosystem
3
A shipping container system for applications
3
Results
•Dev-to-prod reduced from 9 months to 15 minutes (ING)
•Continuous integration job time reduced by more than 60% (BBC)
•Deploy 100 times a day instead of once a week (GILT)
•70% infrastructure consolidation (MetLife)
•60% infrastructure consolidation (Intesa Sanpaolo)
•14x application density; 60% of legacy datacenter migrated in 4 months (GE
Appliances)
•etc.
History and Multi-Dimensional Evolution of Computing
Development Process Application Architecture Deployment and Packaging Application Infrastructure
Waterfall Monolithic Physical Server Datacenter
Agile N-Tier Virtual Servers Hosted
DevOps Microservices Containers Cloud
Virtualization
http://www.edureka.co/devops
Virtualization means to create a virtual version of a device or resource, such as a storage device,
server, network, an OS, hardware, etc. where the framework divides the resource into one or more
execution environments.
 Partitioning a hard drive is considered virtualization because one drive is partitioned to create two
separate hard drives
 Devices, applications and human users are able to interact with the virtual resource as if it were a real
single logical resource
3
Virtual Machines vs. Containers - Architecture
Virtual Machines
● Each virtual machine (VM)
includes the app, the
necessary binaries and
libraries and an entire guest
operating system
Containers
● Containers include the app & all of its dependencies,
but share the kernel with other containers.
● Run as an isolated process in userspace on the host OS
● Not tied to any specific infrastructure – containers run
on any computer, infrastructure and cloud.
VMs
Containers
12
13
Virtual Machines vs. Containers – Key differences
14
Virtual Machines vs. Containers - Size
15
What is Docker?
Docker is an Open platform for developers and sysadmins to build, ship and run
distributed applications.
It can run on most Linux distributions, Windows and Mac OS running Docker Engine
(Toolbox).
It is supported by most of cloud providers and provide a popular Dev/Test, CI &
DevOps platform for many use cases.
16
First Public release of Docker
•March 2013, PyCon, Santa Clara:
"Docker" is shown to a public audience for the first time.
•It is released with an open source license.
•Very positive reactions and feedback!
•The dotCloud team progressively shifts to Docker development.
•The same year, dotCloud changes name to Docker.
17
Basic Architecture
Docker Architecture
18
• Docker Engine – Docker Daemon,
REST API, CLI.
• Docker client – Command Line Interface
(CLI) for interfacing with the Docker
• Image – Hierarchies of files built from a
Dockerfile, the file used as input to the
docker build command
• Container – Running instance of an Image
using the docker run command
• Dockerfile – Text file of Docker instructions
used to assemble a Docker Image
• Docker Hub (Registry) – Image repository
Docker Engine
19
Docker Engine is a client-server application with these major components:
•A server which is a type of long-running program called a daemon process (the dockerd command).
•A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do.
•A command line interface (CLI) client (the docker command).
Docker Images
Source: Docker docs and https://docs.docker.com/glossary/
10
•Image = files + metadata
•These files form the root filesystem of our container.
•The metadata can indicate a number of things, e.g.:
• the author of the image
• the command to execute in the container when
starting it
• environment variables to be set
• etc.
•Images are made of layers, conceptually stacked on top
of each other.
•Each layer can add, change, and remove files and/or
metadata.
•Images can share layers to optimize disk usage, transfer
times, and memory use.
21
Docker Image vs Container
•An image is a read-only filesystem.
•A container is an encapsulated set of processes.
•Running in a read-write copy of that file system.
docker run command starts a container from a given image.
22
Analogy with Object oriented programming
• Images are conceptually similar to classes.
• Layers are conceptually similar to inheritance.
• Containers are conceptually similar to instances.
How to change an Image
If an image is read-only, how do we change it?
•We create a new container from that image.
•Then we make changes to that container.
•When we are satisfied with those changes, we transform them into a new layer.
•A new image is created by stacking the new layer on top of the old image.
Creating images
docker build
Performs a repeatable build sequence.
•This is the preferred method!
docker commit
•Saves all the changes made to a container into a new layer.
•Creates a new image (effectively a copy of the container).
Image namespaces
There are three namespaces:
•Root namespace for Official images
e.g. ubuntu, busybox...
•User namespace for User (and organizations) images
e.g. jpetazzo/clock
•Self-hosted namespace for Self-hosted images
e.g. registry.example.com:5000/my-private/image
Let's explain each of them.
Root namespace
The root namespace is for official images.
They are gated by Docker Inc.
They are generally authored and maintained by third parties.
Those images include:
•Small images like busybox.
•Images to be used as bases for your builds like ubuntu, fedora...
•Ready-to-use components and services, like redis, postgresql...
•Over 150 such images are there at this point!
User namespace
The user namespace holds images for Docker Hub users and organizations.
For example:
jpetazzo/clock
The Docker Hub user is:
Jpetazzo
The image name is:
clock
Self-hosted namespace
This namespace holds images which are not hosted on Docker Hub, but on third party registries.
They contain the hostname (or IP address), and optionally the port, of the registry server.
For example:
localhost:5000/wordpress
•localhost:5000 - host and port of the registry
•wordpress - name of the image
Store and manage images
Images can be stored:
•On your Docker host.
•In a Docker registry.
You can use the Docker client to download or upload images.
docker pull - to download image
docker push - to upload image
Tag images
•Images can have tags.
•Tags define image versions or variants.
docker pull ubuntu is equivalent to docker pull
ubuntu:latest
•The :latesttag is generally updated often.
When to (not to) use tags
Don't specify tags:
•When doing rapid testing and prototyping.
•When experimenting.
•When you want the latest version.
Do specify tags:
•When going to production.
•To ensure that the same version will be used everywhere.
•To ensure repeatability later.
Lab1
Docker Install
&
basic commands
Docker Install
Installation process for Docker on Ubuntu 16.04 machine.
1.Install required Packages
sudo apt-get install curl apt-transport-https ca-certificates software-properties-common
2. Setup Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs)
stable“
3. Install Docker On Ubuntu
sudo apt-get update
sudo apt-get install -y docker-ce
sudo systemctl status docker
Docker CLI – Common / useful commands
• docker pull : pull images/volumes from Docker Registry.
• docker images : list all images on the local volume.
• docker run : run docker image.
• docker ps : list running docker containers (analogous to ps).
• docker ps –a : list all containers including not running.
• docker logs : show log data for a running or stopped container.
• docker rm : remove/delete a container | docker rmi : remove/delete an image.
• docker tag : name a docker image.
• docker build : build docker image from Dockerfile.
• docker login : login to registry.
• docker push : push images/volumes to Docker Registry.
• docker inspect : return container run time configuration parameter metadata.
34
35
Hello World
In your Docker environment, just run the following command:
$ docker run busybox echo hello world
hello world
(If your Docker install is brand new, you will also see a few extra lines, corresponding to the download
of the busybox image.)
36
A more useful container
• This is a brand new container.
• It runs a bare-bones, no-frills ubuntu system.
• -it is shorthand for -i -t.
o -i tells Docker to connect us to the container's stdin. (interactive mode)
o -t tells Docker that we want a pseudo-terminal. (tty)
37
A more useful container
Try to run figlet in our container.
Alright, we need to install it.
38
Do something in our container
39
Try to run installed program “figlet”
40
Comparing the container and the host
Exit the container by logging out of the shell, with ^D or exit.
Now try to run figlet. Does that work?
(It shouldn't; except if, by coincidence, you are running on a machine where figlet was installed
before.)
41
Starting another container
42
Where is my container
•Can we reuse that container that we took time to customize?
We can, but that's not the default workflow with Docker.
•What's the default workflow, then?
Always start with a fresh container.
If we need something installed in our container, build a custom image.
•That seems complicated!
We'll see that it's actually pretty easy!
•And what's the point?
This puts a strong emphasis on automation and repeatability. Let's see why ...
43
Pets Vs Cattle
• In the "pets vs. cattle" metaphor, there are two kinds of servers.
Pets:
o have distinctive names and unique configurations
o when they have an outage, we do everything we can to fix them
o Examples are : Oracle VirtualBox and VMWare
• Cattle:
o have generic names (e.g. with numbers) and generic configuration
o configuration is enforced by configuration management, golden images ...
o when they have an outage, we can replace them immediately with a new server
o Examples are : Docker and Kubernetes
• What's the connection with Docker and containers?
44
Local development environments
• When we use local VMs (with e.g. VirtualBox or VMware), our workflow looks like this:
o create VM from base template (Ubuntu, CentOS...)
o install packages, set up environment
o work on project
o when done, shut down VM
o next time we need to work on project, restart VM as we left it
o if we need to tweak the environment, we do it live
• Over time, the VM configuration evolves, diverges.
• We don't have a clean, reliable, deterministic way to provision that environment.
45
Local development with Docker
• With Docker, the workflow looks like this:
o create container image with our dev environment
o run container with that image
o work on project
o when done, shut down container
o next time we need to work on project, start a new container
o if we need to tweak the environment, we create a new image
• We have a clear definition of our environment, and can share it reliably with others.
46
Background containers
47
Objectives
Our first containers were interactive.
We will now see how to:
• Run a non-interactive container.
• Run a container in the background.
• List running containers.
• Check the logs of a container.
• Stop a container.
• List stopped containers.
48
A non-interactive container
49
Run a container in the background
50
List running containers
51
Starting more containers
52
Viewing only the last container started
53
Viewing only the IDs of the containers
54
View the logs of a container
55
View only the tail of the logs of a container
56
Follow the logs in real time
57
How to stop our containers
58
stop container using stop
59
List stopped containers
60
Restarting a container
Some more options to run a container
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
• Examples:
docker run hello-world # install and run hello-world
(foreground mode by default)
docker run -it ubuntu /bin/bash # run ubuntu container and log into it.
docker run -d -p 9090:80 -t <image id> # -d : detached mode
# -p : port forwarding 9090 -> host
80 -> container
docker exec -it <container id> /bin/bash #login to running container
61
Docker Container Lifecycle
– Conception
• BUILD an Image from a Dockerfile
– Birth
• RUN (create+start) a container
– Reproduction
• COMMIT (persist) a container to a new image
• RUN a new container from an image
– Sleep
• KILL a running container
– Wake
• START a stopped container
– Death
• RM (delete) a stopped container
– Extinction
• RMI a container image (delete image)
62
63
Build Docker Images - Dockerfile
Dockerfile
• Like a Makefile (shell script)
• Extends from a Base Image
• Results in a new Docker Image
•A Docker file lists the steps needed to build an images
• docker build command is used to run a Docker file
65
Writing our first Dockerfile
66
Our Dockerfile must be in a new, empty directory.
• Create a directory to hold our Dockerfile.
$ mkdir MyDockerFile
• Create a Dockerfile inside this directory.
$ cd MyDockerFile
$ vi Dockerfile
Building Dockerfile
67
Dockerfile build output
68
Dockerfile build output – sending build context to Docker Daemon
69
Dockerfile build output – execution steps
70
The cashing system
71
Running the image
72
Viewing image history
73
Introducing JSON syntax
74
Using JSON syntax in Dockerfile
75
When to use JSON syntax and string syntax
76
Dockerfile – CMD and ENTRYPOINT
77
These commands allow us to set the default command to run in a container.
Dockerfile with CMD
78
Build and test our image
79
Dockerfile with CMD and ENTRYPOINT
80
Build and test our image
81
Overriding ENTRYPOINT
82
Lab2
Setup website using Nginx
(refer github for code : static-site)
84
Containerizing an application using dockerfile
Example Static Site Dockerfile
FROM nginx
COPY wrapper.sh /
COPY html /usr/share/nginx/html
CMD ["./wrapper.sh"]
Docker build image CLI example
$ docker build -t static-site:1.0 .
NOTE: The “.” references Dockerfile in local directory
85
Use Cases
Excellent Use Cases for Containers
Ready to Run Application Stacks
– Excellent for Dev/Test setups
– Deployment in Seconds, not Hours/Days
– Start Up, Tear Down Quickly
86
One-Time Run Jobs and Analytics
– Run the Job / Analysis and quit
Front-End App Servers
– Highly horizontally scalable
– Fast A/B, Rolling Deployments
– Traditional Technologies - MW/Backend
New App Dev & Microservices
– Refactor all or part of legacy app
– Containers are great for Microservices Server Density
– Containers can use dynamic ports
– Run many of the same app on a server
• instead of one per VM
Docker Compose
• Docker Compose
– Docker Tool for defining and running multi-container Docker applications
87
Deploy application using Docker Compose
• $ docker-compose up -d
88
Lab3
Setup Wordpress site using docker compose
(refer github for code : docker-compose)
Setup Wordpress site using docker compose
Setup Wordpress site using docker compose
5. Create The WordPress Site:
##############################################
#sudo vi docker-compose.yml
---
---
##############################################
6. Now start the application group:
docker-compose up -d
7. Now, in the browser go to port 8080, using your public IP or host name, as shown below
localhost:8080 # Fill this form and click on install WordPress.
8. Now visit your server’s IP address again to port 8181 this time. You’ll be greeted by the phpMyAdmin login
screen:
localhost:8181
Docker Hub
92
• Docker Inc.
– Repository
– public and private images
• Enables images to be shared and
moved off the laptop
• Example usage:
– $ docker tag docker-whale:latest username/docker-whale:latest
– $ docker push username/docker-whale:latest
– $ docker pull username/docker-whale:latest
Docker Swarm
• Docker Swarm is a technique to create and maintain a cluster
of Docker Engines.
• The Docker engines can be hosted on different nodes, and these
nodes, which are in remote locations, form a Cluster
when connected in Swarm mode.
93
Thanks

More Related Content

Similar to Containerization using docker and its applications

Similar to Containerization using docker and its applications (20)

Introduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker CaptainIntroduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker Captain
 
Docker slides
Docker slidesDocker slides
Docker slides
 
docker : how to deploy Digital Experience in a container drinking a cup of co...
docker : how to deploy Digital Experience in a container drinking a cup of co...docker : how to deploy Digital Experience in a container drinking a cup of co...
docker : how to deploy Digital Experience in a container drinking a cup of co...
 
Getting Started with Docker
Getting Started with DockerGetting Started with Docker
Getting Started with Docker
 
Docker up and Running For Web Developers
Docker up and Running For Web DevelopersDocker up and Running For Web Developers
Docker up and Running For Web Developers
 
Docker Up and Running for Web Developers
Docker Up and Running for Web DevelopersDocker Up and Running for Web Developers
Docker Up and Running for Web Developers
 
.docker : how to deploy Digital Experience in a container drinking a cup of c...
.docker : how to deploy Digital Experience in a container drinking a cup of c....docker : how to deploy Digital Experience in a container drinking a cup of c...
.docker : how to deploy Digital Experience in a container drinking a cup of c...
 
Docker handons-workshop-for-charity
Docker handons-workshop-for-charityDocker handons-workshop-for-charity
Docker handons-workshop-for-charity
 
Docker Oxford launch - Introduction to Docker
Docker Oxford launch - Introduction to DockerDocker Oxford launch - Introduction to Docker
Docker Oxford launch - Introduction to Docker
 
Containers in depth – Understanding how containers work to better work with c...
Containers in depth – Understanding how containers work to better work with c...Containers in depth – Understanding how containers work to better work with c...
Containers in depth – Understanding how containers work to better work with c...
 
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
O'Reilly Software Architecture Conference London 2017: Building Resilient Mic...
 
What is Docker?
What is Docker?What is Docker?
What is Docker?
 
.docker : How to deploy Digital Experience in a container, drinking a cup of ...
.docker : How to deploy Digital Experience in a container, drinking a cup of ....docker : How to deploy Digital Experience in a container, drinking a cup of ...
.docker : How to deploy Digital Experience in a container, drinking a cup of ...
 
Journey to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshiftJourney to the devops automation with docker kubernetes and openshift
Journey to the devops automation with docker kubernetes and openshift
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
Introduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxDataIntroduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxData
 
Docker for dev
Docker for devDocker for dev
Docker for dev
 
Dockerize the World
Dockerize the WorldDockerize the World
Dockerize the World
 
Introduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUGIntroduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUG
 
Introduction to Containers & Diving a little deeper into the benefits of Con...
 Introduction to Containers & Diving a little deeper into the benefits of Con... Introduction to Containers & Diving a little deeper into the benefits of Con...
Introduction to Containers & Diving a little deeper into the benefits of Con...
 

More from Puneet Kumar Bhatia (MBA, ITIL V3 Certified)

More from Puneet Kumar Bhatia (MBA, ITIL V3 Certified) (12)

Introduction to Devops and its applications
Introduction to Devops and  its applicationsIntroduction to Devops and  its applications
Introduction to Devops and its applications
 
Container Orchestration using kubernetes
Container Orchestration using kubernetesContainer Orchestration using kubernetes
Container Orchestration using kubernetes
 
Containerization using docker and its applications
Containerization using docker and its applicationsContainerization using docker and its applications
Containerization using docker and its applications
 
Java Microservices_64 Hours_Day wise plan (002).pdf
Java Microservices_64 Hours_Day wise plan (002).pdfJava Microservices_64 Hours_Day wise plan (002).pdf
Java Microservices_64 Hours_Day wise plan (002).pdf
 
Java Microservices_64 Hours_Day wise plan (002).pdf
Java Microservices_64 Hours_Day wise plan (002).pdfJava Microservices_64 Hours_Day wise plan (002).pdf
Java Microservices_64 Hours_Day wise plan (002).pdf
 
Aws interview questions
Aws interview questionsAws interview questions
Aws interview questions
 
Changing paradigm in job market
Changing paradigm in job marketChanging paradigm in job market
Changing paradigm in job market
 
Kaizen08
Kaizen08Kaizen08
Kaizen08
 
Writing first-hudson-plugin
Writing first-hudson-pluginWriting first-hudson-plugin
Writing first-hudson-plugin
 
Network
NetworkNetwork
Network
 
Disney itil journey
Disney itil journeyDisney itil journey
Disney itil journey
 
Using itil prince2_together_august_2010
Using itil prince2_together_august_2010Using itil prince2_together_august_2010
Using itil prince2_together_august_2010
 

Recently uploaded

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 

Recently uploaded (20)

Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AI
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital BusinessesWSO2CON 2024 - Software Engineering for Digital Businesses
WSO2CON 2024 - Software Engineering for Digital Businesses
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - Kanchana
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of TransformationWSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
 
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
WSO2Con2024 - From Blueprint to Brilliance: WSO2's Guide to API-First Enginee...
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 

Containerization using docker and its applications

  • 2. 3 Why the buzz around Containers and Docker? •The software industry has changed •Before: • monolithic applications • long development cycles • single environment • slowly scaling up •Now: • decoupled services • fast, iterative improvements • multiple environments • quickly scaling out
  • 3. 3 Deployment becomes very complex •Many different stacks: • languages • frameworks • Databases •Many different targets: • individual development environments • pre-production, QA, staging... • production: on prem, cloud, hybrid
  • 5. 3 Analogy with the shipping industry
  • 7. 3 A new shipping ecosystem
  • 8. 3 A shipping container system for applications
  • 9. 3 Results •Dev-to-prod reduced from 9 months to 15 minutes (ING) •Continuous integration job time reduced by more than 60% (BBC) •Deploy 100 times a day instead of once a week (GILT) •70% infrastructure consolidation (MetLife) •60% infrastructure consolidation (Intesa Sanpaolo) •14x application density; 60% of legacy datacenter migrated in 4 months (GE Appliances) •etc.
  • 10. History and Multi-Dimensional Evolution of Computing Development Process Application Architecture Deployment and Packaging Application Infrastructure Waterfall Monolithic Physical Server Datacenter Agile N-Tier Virtual Servers Hosted DevOps Microservices Containers Cloud
  • 11. Virtualization http://www.edureka.co/devops Virtualization means to create a virtual version of a device or resource, such as a storage device, server, network, an OS, hardware, etc. where the framework divides the resource into one or more execution environments.  Partitioning a hard drive is considered virtualization because one drive is partitioned to create two separate hard drives  Devices, applications and human users are able to interact with the virtual resource as if it were a real single logical resource 3
  • 12. Virtual Machines vs. Containers - Architecture Virtual Machines ● Each virtual machine (VM) includes the app, the necessary binaries and libraries and an entire guest operating system Containers ● Containers include the app & all of its dependencies, but share the kernel with other containers. ● Run as an isolated process in userspace on the host OS ● Not tied to any specific infrastructure – containers run on any computer, infrastructure and cloud. VMs Containers 12
  • 13. 13 Virtual Machines vs. Containers – Key differences
  • 14. 14 Virtual Machines vs. Containers - Size
  • 15. 15 What is Docker? Docker is an Open platform for developers and sysadmins to build, ship and run distributed applications. It can run on most Linux distributions, Windows and Mac OS running Docker Engine (Toolbox). It is supported by most of cloud providers and provide a popular Dev/Test, CI & DevOps platform for many use cases.
  • 16. 16 First Public release of Docker •March 2013, PyCon, Santa Clara: "Docker" is shown to a public audience for the first time. •It is released with an open source license. •Very positive reactions and feedback! •The dotCloud team progressively shifts to Docker development. •The same year, dotCloud changes name to Docker.
  • 18. Docker Architecture 18 • Docker Engine – Docker Daemon, REST API, CLI. • Docker client – Command Line Interface (CLI) for interfacing with the Docker • Image – Hierarchies of files built from a Dockerfile, the file used as input to the docker build command • Container – Running instance of an Image using the docker run command • Dockerfile – Text file of Docker instructions used to assemble a Docker Image • Docker Hub (Registry) – Image repository
  • 19. Docker Engine 19 Docker Engine is a client-server application with these major components: •A server which is a type of long-running program called a daemon process (the dockerd command). •A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do. •A command line interface (CLI) client (the docker command).
  • 20. Docker Images Source: Docker docs and https://docs.docker.com/glossary/ 10 •Image = files + metadata •These files form the root filesystem of our container. •The metadata can indicate a number of things, e.g.: • the author of the image • the command to execute in the container when starting it • environment variables to be set • etc. •Images are made of layers, conceptually stacked on top of each other. •Each layer can add, change, and remove files and/or metadata. •Images can share layers to optimize disk usage, transfer times, and memory use.
  • 21. 21 Docker Image vs Container •An image is a read-only filesystem. •A container is an encapsulated set of processes. •Running in a read-write copy of that file system. docker run command starts a container from a given image.
  • 22. 22 Analogy with Object oriented programming • Images are conceptually similar to classes. • Layers are conceptually similar to inheritance. • Containers are conceptually similar to instances.
  • 23. How to change an Image If an image is read-only, how do we change it? •We create a new container from that image. •Then we make changes to that container. •When we are satisfied with those changes, we transform them into a new layer. •A new image is created by stacking the new layer on top of the old image.
  • 24. Creating images docker build Performs a repeatable build sequence. •This is the preferred method! docker commit •Saves all the changes made to a container into a new layer. •Creates a new image (effectively a copy of the container).
  • 25. Image namespaces There are three namespaces: •Root namespace for Official images e.g. ubuntu, busybox... •User namespace for User (and organizations) images e.g. jpetazzo/clock •Self-hosted namespace for Self-hosted images e.g. registry.example.com:5000/my-private/image Let's explain each of them.
  • 26. Root namespace The root namespace is for official images. They are gated by Docker Inc. They are generally authored and maintained by third parties. Those images include: •Small images like busybox. •Images to be used as bases for your builds like ubuntu, fedora... •Ready-to-use components and services, like redis, postgresql... •Over 150 such images are there at this point!
  • 27. User namespace The user namespace holds images for Docker Hub users and organizations. For example: jpetazzo/clock The Docker Hub user is: Jpetazzo The image name is: clock
  • 28. Self-hosted namespace This namespace holds images which are not hosted on Docker Hub, but on third party registries. They contain the hostname (or IP address), and optionally the port, of the registry server. For example: localhost:5000/wordpress •localhost:5000 - host and port of the registry •wordpress - name of the image
  • 29. Store and manage images Images can be stored: •On your Docker host. •In a Docker registry. You can use the Docker client to download or upload images. docker pull - to download image docker push - to upload image
  • 30. Tag images •Images can have tags. •Tags define image versions or variants. docker pull ubuntu is equivalent to docker pull ubuntu:latest •The :latesttag is generally updated often.
  • 31. When to (not to) use tags Don't specify tags: •When doing rapid testing and prototyping. •When experimenting. •When you want the latest version. Do specify tags: •When going to production. •To ensure that the same version will be used everywhere. •To ensure repeatability later.
  • 33. Docker Install Installation process for Docker on Ubuntu 16.04 machine. 1.Install required Packages sudo apt-get install curl apt-transport-https ca-certificates software-properties-common 2. Setup Docker repository curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable“ 3. Install Docker On Ubuntu sudo apt-get update sudo apt-get install -y docker-ce sudo systemctl status docker
  • 34. Docker CLI – Common / useful commands • docker pull : pull images/volumes from Docker Registry. • docker images : list all images on the local volume. • docker run : run docker image. • docker ps : list running docker containers (analogous to ps). • docker ps –a : list all containers including not running. • docker logs : show log data for a running or stopped container. • docker rm : remove/delete a container | docker rmi : remove/delete an image. • docker tag : name a docker image. • docker build : build docker image from Dockerfile. • docker login : login to registry. • docker push : push images/volumes to Docker Registry. • docker inspect : return container run time configuration parameter metadata. 34
  • 35. 35 Hello World In your Docker environment, just run the following command: $ docker run busybox echo hello world hello world (If your Docker install is brand new, you will also see a few extra lines, corresponding to the download of the busybox image.)
  • 36. 36 A more useful container • This is a brand new container. • It runs a bare-bones, no-frills ubuntu system. • -it is shorthand for -i -t. o -i tells Docker to connect us to the container's stdin. (interactive mode) o -t tells Docker that we want a pseudo-terminal. (tty)
  • 37. 37 A more useful container Try to run figlet in our container. Alright, we need to install it.
  • 38. 38 Do something in our container
  • 39. 39 Try to run installed program “figlet”
  • 40. 40 Comparing the container and the host Exit the container by logging out of the shell, with ^D or exit. Now try to run figlet. Does that work? (It shouldn't; except if, by coincidence, you are running on a machine where figlet was installed before.)
  • 42. 42 Where is my container •Can we reuse that container that we took time to customize? We can, but that's not the default workflow with Docker. •What's the default workflow, then? Always start with a fresh container. If we need something installed in our container, build a custom image. •That seems complicated! We'll see that it's actually pretty easy! •And what's the point? This puts a strong emphasis on automation and repeatability. Let's see why ...
  • 43. 43 Pets Vs Cattle • In the "pets vs. cattle" metaphor, there are two kinds of servers. Pets: o have distinctive names and unique configurations o when they have an outage, we do everything we can to fix them o Examples are : Oracle VirtualBox and VMWare • Cattle: o have generic names (e.g. with numbers) and generic configuration o configuration is enforced by configuration management, golden images ... o when they have an outage, we can replace them immediately with a new server o Examples are : Docker and Kubernetes • What's the connection with Docker and containers?
  • 44. 44 Local development environments • When we use local VMs (with e.g. VirtualBox or VMware), our workflow looks like this: o create VM from base template (Ubuntu, CentOS...) o install packages, set up environment o work on project o when done, shut down VM o next time we need to work on project, restart VM as we left it o if we need to tweak the environment, we do it live • Over time, the VM configuration evolves, diverges. • We don't have a clean, reliable, deterministic way to provision that environment.
  • 45. 45 Local development with Docker • With Docker, the workflow looks like this: o create container image with our dev environment o run container with that image o work on project o when done, shut down container o next time we need to work on project, start a new container o if we need to tweak the environment, we create a new image • We have a clear definition of our environment, and can share it reliably with others.
  • 47. 47 Objectives Our first containers were interactive. We will now see how to: • Run a non-interactive container. • Run a container in the background. • List running containers. • Check the logs of a container. • Stop a container. • List stopped containers.
  • 49. 49 Run a container in the background
  • 52. 52 Viewing only the last container started
  • 53. 53 Viewing only the IDs of the containers
  • 54. 54 View the logs of a container
  • 55. 55 View only the tail of the logs of a container
  • 56. 56 Follow the logs in real time
  • 57. 57 How to stop our containers
  • 61. Some more options to run a container docker run [OPTIONS] IMAGE [COMMAND] [ARG...] • Examples: docker run hello-world # install and run hello-world (foreground mode by default) docker run -it ubuntu /bin/bash # run ubuntu container and log into it. docker run -d -p 9090:80 -t <image id> # -d : detached mode # -p : port forwarding 9090 -> host 80 -> container docker exec -it <container id> /bin/bash #login to running container 61
  • 62. Docker Container Lifecycle – Conception • BUILD an Image from a Dockerfile – Birth • RUN (create+start) a container – Reproduction • COMMIT (persist) a container to a new image • RUN a new container from an image – Sleep • KILL a running container – Wake • START a stopped container – Death • RM (delete) a stopped container – Extinction • RMI a container image (delete image) 62
  • 63. 63 Build Docker Images - Dockerfile
  • 64. Dockerfile • Like a Makefile (shell script) • Extends from a Base Image • Results in a new Docker Image •A Docker file lists the steps needed to build an images • docker build command is used to run a Docker file 65
  • 65. Writing our first Dockerfile 66 Our Dockerfile must be in a new, empty directory. • Create a directory to hold our Dockerfile. $ mkdir MyDockerFile • Create a Dockerfile inside this directory. $ cd MyDockerFile $ vi Dockerfile
  • 68. Dockerfile build output – sending build context to Docker Daemon 69
  • 69. Dockerfile build output – execution steps 70
  • 74. Using JSON syntax in Dockerfile 75
  • 75. When to use JSON syntax and string syntax 76
  • 76. Dockerfile – CMD and ENTRYPOINT 77 These commands allow us to set the default command to run in a container.
  • 78. Build and test our image 79
  • 79. Dockerfile with CMD and ENTRYPOINT 80
  • 80. Build and test our image 81
  • 82. Lab2 Setup website using Nginx (refer github for code : static-site)
  • 83. 84 Containerizing an application using dockerfile Example Static Site Dockerfile FROM nginx COPY wrapper.sh / COPY html /usr/share/nginx/html CMD ["./wrapper.sh"] Docker build image CLI example $ docker build -t static-site:1.0 . NOTE: The “.” references Dockerfile in local directory
  • 85. Excellent Use Cases for Containers Ready to Run Application Stacks – Excellent for Dev/Test setups – Deployment in Seconds, not Hours/Days – Start Up, Tear Down Quickly 86 One-Time Run Jobs and Analytics – Run the Job / Analysis and quit Front-End App Servers – Highly horizontally scalable – Fast A/B, Rolling Deployments – Traditional Technologies - MW/Backend New App Dev & Microservices – Refactor all or part of legacy app – Containers are great for Microservices Server Density – Containers can use dynamic ports – Run many of the same app on a server • instead of one per VM
  • 86. Docker Compose • Docker Compose – Docker Tool for defining and running multi-container Docker applications 87
  • 87. Deploy application using Docker Compose • $ docker-compose up -d 88
  • 88. Lab3 Setup Wordpress site using docker compose (refer github for code : docker-compose)
  • 89. Setup Wordpress site using docker compose
  • 90. Setup Wordpress site using docker compose 5. Create The WordPress Site: ############################################## #sudo vi docker-compose.yml --- --- ############################################## 6. Now start the application group: docker-compose up -d 7. Now, in the browser go to port 8080, using your public IP or host name, as shown below localhost:8080 # Fill this form and click on install WordPress. 8. Now visit your server’s IP address again to port 8181 this time. You’ll be greeted by the phpMyAdmin login screen: localhost:8181
  • 91. Docker Hub 92 • Docker Inc. – Repository – public and private images • Enables images to be shared and moved off the laptop • Example usage: – $ docker tag docker-whale:latest username/docker-whale:latest – $ docker push username/docker-whale:latest – $ docker pull username/docker-whale:latest
  • 92. Docker Swarm • Docker Swarm is a technique to create and maintain a cluster of Docker Engines. • The Docker engines can be hosted on different nodes, and these nodes, which are in remote locations, form a Cluster when connected in Swarm mode. 93

Editor's Notes

  1. All of this is part of a transformation of technologies along a number of fronts, and is the basis for modern agile application development.
  2. Now, let's look at how a virtual machine (VM) is different from a container. While containers may sound like a VM, the two are distinct technologies. With VMs each virtual machine includes the application, the necessary binaries and libraries and the entire guest operating system. Whereas, Containers include the application, all of its dependencies, but share the kernel with other containers and are not tied to any specific infrastructure, other than having the Docker engine installed on its host – allowing containers to run on almost any computer, infrastructure and cloud. Note - at this time, Windows and Linux containers require that they run on their respective kernel base, therefore, Windows containers cannot run on Linux hosts and vice versa.
  3. Intro to Basic Container Concepts A container is a runtime instance of a Docker image. https://docs.docker.com/engine/reference/glossary/#/container Docker is the company and containerization technology. https://docs.docker.com/engine/reference/glossary/#/docker
  4. Jumping back a bit, there is a new nomenclature that Docker introduces, here are terms that you will need to be familiar with. Each of these Docker technologies will be explored in this HOL. It's important to note that this core technology is open source. There are other technologies in the greater ecosystem, that could be open source, or licensed or even a hybrid, with a paid support option.
  5. The Docker Engine is THE core piece of technology that allows you to run containers. In order for a container to run on any Linux host, at a minimum, the Docker Engine needs to be installed. Then the container can run on any Linux host where Docker Engine is installed, providing the benefit of portability, without doing any application specific configuration changes on each host.
  6. Docker images are a collection of files, which have everything needed to run the software application inside the container. However, they are ephemeral, meaning that any data that is written inside the container, while it is running, will not be retained. If the container is stopped and restarted from its image, the container will run exactly the same as the first time, absent of any changes made during the last run cycle. Changes to the container either have to be made during the image creation process, using the Dockerfile that become part of the image, or data can be retained by mounting a persistent storage volume, from inside the container to the outside. This will be explored further in the HOL exercises below.
  7. Running multi container environment for multiple purposes: Mail (Messaging) Server Web Server + DB Caching Docker compose is written in YAML Single command to manage all services
  8. Running multi container environment for multiple purposes: Mail (Messaging) Server Web Server + DB Caching Docker compose is written in YAML Single command to manage all services
  9. Running multi container environment for multiple purposes: Mail (Messaging) Server Web Server + DB Caching Docker compose is written in YAML Dingle command to manage all services