Demystifying Docker
$whoami
Principal Development Engineer at DellEMC
1
st
half of my career was in CGI & VMware
2
nd
half of my career has been in System Integration Testing
Docker Captain (since 2016)
Docker Bangalore Meetup Organizer ( 7600+ Registered Users)
DockerLabs Incubator
Ajeet Singh Raina
Twitter: @ajeetsraina
GitHub: ajeetraina
Ajeet Singh
Raina
@ajeetsraina
Tip of the
Captains Hat
Award
$curl www.collabnix.com
A Shift from Monolithic to
Microservice Architecture
Let’s imagine you are building
a large, complex application,
e.g., Online Store
Successful Software Development
Architecture
Process
Organization
Successful Software Development
Architecture
Process
Organization
Small
Autonomous
team
Successful Software Development
Architecture
Process
Agile
Continuous Delivery
Organization
Small
Autonomous
team
Successful Software Development
Architecture
Monolthic Vs Microservices
Process
Agile
Continuous Delivery
Organization
Small
Autonomous
team
A Close Look at Monolithic
Browser
Client
App
StorefrontUI
Module
Catalog
Module
Reviews
Module
Orders
Module
HTML
REST/JSON
Database
A Close Look at Monolithic
Browser
Client
App
StorefrontUI
Module
Catalog
Module
Reviews
Module
Orders
Module
WAR
Tomcat
HTML
REST/JSON
Database
Simple to Develop, Test, Deploy & Scale
- Simple to develop because of all the tools and IDEs support to that kind
of application by default.
- Easy to deploy because all components are packed into one bundle.
- Easy to scale the whole application.
Benefits of Monolith
- Very difficult to maintain
- One component failure will cause the whole system to fail.
- Very difficult to understand and create the patches for monolithic applications.
- Adapting to new technology is very challengeable.
- Take a long time to startup because all the components need to get started.
Disadvantages of Monolith
Today
- Apps are constantly developed
- Built from loosely coupled components
- Newer version are deployed often
- Deployed to a multitude of servers
Customer/
Clients/
Users
Data
Storage
Data
Storage
Data
Storage
Microservice Architecture
Catalog
Service
Reviews
Service
Order
Service
Service
CatalogDatabase
Reviews
Database
Order
Database
Database
API
Gateway
StorefrontUI
Browser
Mobile
Device
REST
REST
HTML
REST
- Can scale independent microservices separately. No need to scale
the whole the system
- Can use the latest technologies to develop the microservices.
- One component failure will not cause entire system downtimes.
- When developing an overall solution we can parallel the
microservices development task with the small teams. So it helps to
decrease the development time.
Benefits of Microservices
Once upon a time…a Software Stack
Now much more distributed & complex…
Shipping Code is damn too hard
An Effort to solve the problem Complexity
Every possible good to ship X Every Possible way to Ship
Enter….Internodal Container
That’s what Docker is all about..
What is Docker and what
problem does it solve?
What is Docker?
Refers to several things in 2019
Ø Docker as a “Company”
Ø Docker as a “Product”
Ø Docker as a “Platform”
Ø Docker as a “CLI Tool”
Ø Docker as a “Computer Program”
Standardizedpackagingfor
softwareanddependencies
Isolateappsfromeachother
SharethesameOSkernel
WorksforallmajorLinux
distributions
ContainersnativetoWindows
Server2016&1809
What is Docker?
Docker Product Offerings
Today Docker runs on
Traditional Software
Development WorkFlow
(without Docker)
Traditional Software
Development WorkFlow
(with Docker)
Docker Vs VM
Docker Containers are NOT VMs
Virtual Machine
Containers
Docker Container Vs VM
Comparing Docker & VM
VirtualMachines Docker
Each VM runs its own OS Container is just a user space of OS
Boot up time is in minutes Containers instantiate in seconds
VMs snapshots are used sparingly Images are built incrementally on top
of another like layers. Lots of
images/snapshots
Not effective diffs. Not version
controlled
Images can be diffed and can be
version controlled. Docker hub is like
GITHUB
Cannot run more than couple of VMs
on an average laptop
Can run many Docker containers in a
laptop.
Only one VM can be started from one
set of VMX and VMDK files
Multiple Docker containers can be
started from one Docker image
What makes Containers
so small?
User space refers to all of the code in an operating system that lives
outside of the kernel.
Container = User Space of OS
ProcessVirtualization
Demonstrating Process
Virtualization
Demonstration Process Virtualization
Docker Engine
Architecture
Docker Engine Architecture
Docker Vocabulary
Image Layers
Kernel
AlpineLinux
InstallPythonandPip
UpgradePip
CopyRequirements
InstallRequirements
A Look at “Dive” Tool
A tool for exploring each layer in a Docker image
https://github.com/wagoodman/dive
Basic Docker CLIs
Pulling Docker Image
$ docker pull ajeetraina/hellowhale
Listing out Docker Images
$ docker image ls
Running Docker Containers
$ docker run –d –p 5000:5000 –-name hellowhale ajeetraina/hellowhale
Stopping the container
$ docker stop hellowhale (or <container id>)
Docker Desktop Community
Vs Docker Enterprise
Docker Community Edition
All in one development for Swarm and Kubernetes
Docker Desktop Community Vs Enterprise
Docker Desktop
Community
Docker Desktop
Enterprise
Simplest Path to Container-based Development
Latest Docker Engine
Based on Containerd
Certified Kubernetes
Available for Windows 10
& MacOS
Develop in any Language
& Framework, even
multiple versions
simultaneously
Docker Desktop Community Vs Enterprise
Docker Desktop
Community
Docker Desktop
Enterprise
Production-Ready Environment
Same API & Commands
shared by Developers in
Production
Application Designer interface
to simplify creating &
developing Docker
applications
Swappable Docker Engine
and Kubernetes versions to
match Docker Enterprise
production environments
Using Docker – Build,
Ship & Run WorkFlow
Build. Ship. Run.
- Create DockerHub Account(if not completed)
- Open https://play-with-docker.com
- Hello Whale Example
- Build Your First Docker Image & Push it to DockerHub
Demo
Docker New CLI Plugin
Plugins DeliveryVehicle Availability
app 19.03-ce,19.03-ee,DesktopCE,
DesktopEE
AvailablenowviaEngineCommunityandDesktop
Community(Mac|Windows)
DockerEnterprise3.0
assemble 19.03-ee,DesktopEnterprise AvailablewithDockerEnterprise3.0
template 19.03-ee,DesktopEnterprise AvailablewithDockerEnterprise3.0
cluster 19.03-ee,DesktopEnterprise AvailablewithDockerEnterprise3.0
gmsa 19.03-ee,DesktopEnterprise AvailablewithDockerEnterprise3.0
registry 19.03-ee,DesktopEnterprise AvailablewithDockerEnterprise3.0
buildx desktop-edge AvailableinDesktopCEEdge(Mac|Windows),
downloadtheplugin
jump Signupformoreinformation Signupformoreinformation
pipeline Signupformoreinformation Signupformoreinformation
Docker New CLI Plugin
Building Docker Containers &
Microservices
Introducing Dockerfile
Series of instructions to build Docker Images
Dockerfile – Example
Each Dockerfile creates a Layer
Kernel
AlpineLinux
InstallPythonandPip
UpgradePip
CopyRequirements
InstallRequirements
Compose is a tool for defining and running multi-container Docker applications
Docker Compose
- Running WordPress Application using Docker Compose
Demo
How can I contribute?
$open dockerlabs.collabnix.com
Upcoming Event
Reference
v https://github.com/collabnix/dockerlabs
v https://docs.docker.com
v http://www.collabnix.com
Thank You