SlideShare a Scribd company logo
FullStack Developers Israel
Docking micro services
with

Haggai	
  Philip	
  Zagury	
  
28.1.2014
Google Campus T.A

Hosted by:
WHO AM I ?
Haggai Philip Zagury,
DevOps Engineer

	
   	
   }
{
● 
● 
● 
● 

Continuous integration
Continuous delivery
It Operations
Configuration management

over 10 years of
DevOps expertise
“ 	
  I am a member of Tikal's
DevOps/ALM group. With over
15 members, we meet, share,
contribute and code together
on a monthly basis

“
WHO WE ARE?
We help companies build,
deliver, deploy, manage
and optimize their products.
OUR EXPERTISE
Where are we
going today
	
  	
  

text
How CM & Deployment changed
Between
Monolithic & SOA / MSA
Docking your services_with_docker
Stack => Stacks
More Technologies
More Technologies

More Services (API’s)
More Technologies

More Services (API’s)

More Teams
ch team with
Ea

it’s own
“madness”
MONOLITHIC
app deployment

FABRIC	
  

}

1	
  …	
  n	
  

*	
  n	
  
1	
  …	
  n	
  
MONOLITHIC style for SOA/MSA

FABRIC	
  

}

service	
  A	
  
*	
  n	
  
service	
  B	
  

service	
  C	
  
MONOLITHIC style for SOA/MSA
Team	
  /	
  Service	
  A	
  
MONOLITHIC style for SOA/MSA
Team	
  /	
  Service	
  B	
  
MONOLITHIC style for SOA/MSA
Team	
  /	
  Service	
  C	
  
MONOLITHIC style for SOA/MSA

FABRIC	
  

}

*	
  n	
  
text

MONOLITHIC “style”

System provisioning (& OS provisioning)
•  Much more “base images” in order to save time
	
   Deployment takes much longer (ad hoc configuration)
• 
•  Consolidate in order to save time
•  Backup & Restore ? doesn’t save time :(
•  Security ?
text

MONOLITHIC “style”

I	
  need	
  xyz	
  installed	
  
• Kernel	
  version	
  not	
  supported	
  
• Other	
  component's	
  depend	
  on	
  that	
  
• Wait	
  for	
  next	
  release	
  /	
  OS	
  upgrade	
  
text

More images == GB/$$/PERF
Between 100MB & nGB

Cost in storage … [ e.g. S3 ]
Cost in performance [ VMware …]
Docking your services_with_docker
Docking your services_with_docker
From library dependency)
From library dependency
runtime directory (encapsulation)
From library dependency
runtime directory (encapsulation)
“.service” (hybrid)
Choose 1 tool for the job ?!

FABRIC	
  

}

service	
  A	
  
*	
  n	
  
service	
  B	
  

service	
  C	
  
Containers	
  
•  OSLV	
  -­‐	
  OperaJng	
  System	
  Level	
  VirtualizaJon	
  (link)	
  
•  API	
  &	
  tooling,	
  which	
  enable	
  *nix	
  users	
  to	
  easily	
  
create	
  and	
  manage	
  system	
  or	
  applicaJon	
  
containers.	
  
	
  
What are containers anyway ?
text

Linux Containers (LXC) - Why ?

Isn't there enough container tech ?
•  Solaris Zones (containers - link)
	
   Vserver
• 
•  Openvz
•  Chroot

Why now ?
•  Solaris not widely used as linux/freebsd …
	
   Linux kernel support ( >= 2.6.27 )
• 
•  Application segmentation
•  We really need it !!! => “.service” era
text

Linux Containers (LXC) - Why ?

Features
•  Kernel namespaces [ isolated processes, network etc ]
	
  
•  Chroot & Seccomp (isolation)

•  Control groups (a.k.a cgroups)
	
  

Limitation	
  
• Only Linux !
text

Revolution – Hard/Software

From	
  Rack	
  servers	
  =>	
  Blade	
  
So what’s this DOCKER and
why do I need it ?
Why DOCKER ?
Why?
•  A wrapper for LXC
•  An abstraction layer for LXC + features
So Why not “plain old” LXC ?
•  Portable deployments across machines
• 
• 
• 

LXC alone doesn't guarantee that !
Docker build - a “build tool” designed for portability
Application centric / OS centric [ Docker’s API ]

•  SHA-1 (git like) based versioning
• 
• 

DRY / Reuse - 1 base image for many applications
Sharing - index (global) or registry (private / on prem)
text

Docker ( & LXC ) Solve !

ISOLATION
•  Daemon per container
	
  

Any	
  version	
  is	
  supported	
  
text

Docker ( & LXC ) Solve !

ISOLATION
•  Daemon per container
	
  
SECURITY	
  
•  Container == Independent ( user/group/service etc)
•  New version == new container ( not toe trading …)
text

Docker ( & LXC ) Solve !

ISOLATION
•  Daemon per container
	
  
SECURITY	
  
•  Container == Independent ( user/group/service etc)
•  New version == new container ( not toe trading …)

PORTABILITY	
  
•  Container on DEV machine => to production
•  Deploy from private registry
•  Rollback == latest -1
VM	
  vs	
  Container	
  

• 
• 
• 
• 

No hypervisor layer
No lib duplication
Shared kernel
VMS are “heavy”

• 
• 
• 
• 

5-10 x Faster
Startup time
VMS are “heavy”
Better utilize HW (cloud)
Docker - lightweight

• 
• 

Reuse kernel
Add functionality to a
container, version it, share it
Micro service example

Docker	
  

•  ROR	
  front	
  end	
  
•  Key-­‐value	
  store	
  
Host	
  /	
  VM	
  	
  
Workflow(s)
The developer workflow
●  How do we test locally ? { if running on
windows / OSX }
●  Define an interface with operations ?
Vagrant & Docker
Vagrant.configure("2") do |config|
config.vm.box = "dummy" config.vm.provider :docker do |docker|
docker.image = "your/image:tag"
docker.cmd

= ["/path/to/your", "command"]

end
end

vagrant	
  plugin	
  install	
  docker-­‐provider	
  
	
  
-­‐	
  docker	
  friendly	
  vagrant	
  image	
  
Fast,	
  isolated	
  development	
  
environments	
  using	
  Docker.	
  
•  Define your application’s environment
•  OS
•  Packages
•  Configuration ! etc
•  Number of machines ?
•  Define a container via Dockerfile
•  Use that Dockerfile to define your environment (via yaml
file)
web:	
  
workfl
o

w	
  

	
  	
  build:	
  .	
  
	
  	
  links:	
  
	
  	
  	
  -­‐	
  db	
  
	
  	
  ports:	
  
	
  	
  	
  -­‐	
  8000:8000	
  
db:	
  
	
  	
  image:	
  hagzag/pgsql	
  
Search & Get an image
docker	
  search	
  <keyword>	
  
	
  

root@docker-­‐poc:/tmp#	
  docker	
  search	
  centos*6	
  
NAME	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DESCRIPTION	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
	
  
	
  STARS	
  	
  	
  	
  	
  OFFICIAL	
  	
  	
  TRUSTED	
  
saltstack/centos-­‐6	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  
	
  0	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
	
  	
  	
  	
  [OK]	
  
salgest/centos-­‐6	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  
	
  0	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
	
  	
  	
  	
  [OK]	
  
saltstack/centos-­‐6-­‐minimal	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  1	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
	
  	
  	
  	
  [OK]	
  
leifw/tokumx-­‐buildslave-­‐centos-­‐6	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  0	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
	
  	
  	
  	
  [OK]	
  
tenforward/centos-­‐i386	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  CentOS	
  6	
  32bit	
  image	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  0	
  
hansode/rpmbuilder-­‐rhel6	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  CentOS-­‐6	
  with	
  rpmdevtools	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  0	
  
...	
  

hgp://index.Docker.io	
  
Define your own
Dockerfile	
  -­‐>	
  Redis	
  server	
  running	
  in	
  a	
  container	
  	
  
#	
  Docker	
  Image/tag	
  
FROM	
  	
  	
  	
  	
  	
  	
  	
   	
  ubuntu:12.10	
  
#	
  command(s)	
  to	
  execute	
  on	
  container	
  	
  
RUN	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  apt-­‐get	
  update	
  
RUN	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  apt-­‐get	
  -­‐y	
  install	
  redis-­‐server	
  
#	
  what	
  port	
  to	
  listen	
  on	
  
EXPOSE	
  	
  	
  	
  	
  
	
  6379	
  
#	
  once	
  container	
  is	
  acJve	
  what	
  binary	
  to	
  run	
  
ENTRYPOINT	
  	
   	
  ["/usr/bin/redis-­‐server"]	
  
Docker - Choose base
docker	
  pull	
  user/container-­‐name	
  
	
  

root@docker-­‐poc:/tmp#	
  docker	
  pull	
  saltstack/centos-­‐6-­‐minimal	
  
Pulling	
  repository	
  saltstack/centos-­‐6-­‐minimal	
  
aca320b373f2:	
  Download	
  complete	
  
f2f28f99c5fd:	
  Download	
  complete	
  
bf9724189396:	
  Download	
  complete	
  
e7adb01c55f6:	
  Download	
  complete	
  
a3f13a39bbbe:	
  Download	
  complete	
  
	
  
	
  

Git	
  style	
  “tags”	
  

Salt	
  –	
  inside	
  …	
  
Docker build
build	
  from	
  Dockerfile	
  	
  
	
  
docker	
  build	
  .	
  
	
  
Step	
  1	
  :	
  FROM	
  ubuntu:12.10	
  
	
  -­‐-­‐-­‐>	
  b750fe79269d	
  
Step	
  2	
  :	
  RUN	
  apt-­‐get	
  update	
  
	
  -­‐-­‐-­‐>	
  Running	
  in	
  0d768rc284d	
  
Fetched	
  9813	
  kB	
  in	
  20s	
  (481	
  kB/s)	
  
	
  -­‐-­‐-­‐>	
  46a6f0556e96	
  
Step	
  3	
  :	
  RUN	
  apt-­‐get	
  -­‐y	
  install	
  redis-­‐server	
  
	
  -­‐-­‐-­‐>	
  Running	
  in	
  5ea88c37d21f	
  
The	
  following	
  extra	
  packages	
  will	
  be	
  installed:	
  
	
  	
  libjemalloc1	
  
The	
  following	
  NEW	
  packages	
  will	
  be	
  installed:	
  
	
  	
  libjemalloc1	
  redis-­‐server	
  
0	
  upgraded,	
  2	
  newly	
  installed,	
  0	
  to	
  remove	
  and	
  0	
  not	
  upgraded.	
  
Need	
  to	
  get	
  319	
  kB	
  of	
  archives.	
  
	
  
Docker build
…	
  
Processing	
  triggers	
  for	
  ureadahead	
  ...	
  
	
  -­‐-­‐-­‐>	
  ba4030995701	
  
Step	
  4	
  :	
  EXPOSE	
  6379	
  
	
  -­‐-­‐-­‐>	
  Running	
  in	
  24720beda74b	
  
	
  -­‐-­‐-­‐>	
  6fdf06372117	
  
Step	
  5	
  :	
  ENTRYPOINT	
  ["/usr/bin/redis-­‐server"]	
  
	
  -­‐-­‐-­‐>	
  Running	
  in	
  c9b9480840ad	
  
	
  -­‐-­‐-­‐>	
  a6dd4adbb425	
  
Successfully	
  built	
  a6dd4adbb425	
  
	
  
docker	
  images	
  
REPOSITORY	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  TAG	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  IMAGE	
  ID	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  CREATED	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  VIRTUAL	
  SIZE	
  
<none>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <none>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  a6dd4adbb425	
  	
  	
  	
  	
  	
  	
  	
  8	
  minutes	
  ago	
  	
  	
  	
  	
  	
  	
  297.2	
  MB	
  
Docker tag & push
docker	
  tag	
  a6dd4adbb425	
  localhost:5000/redis_hagzag	
  
	
  
	
  
docker	
  push	
  localhost:5000/redis_hagzag	
  
The	
  push	
  refers	
  to	
  a	
  repository	
  [localhost:5000/redis_hagzag]	
  (len:	
  1)	
  
Sending	
  image	
  list	
  
Pushing	
  repository	
  localhost:5000/redis_hagzag	
  (1	
  tags)	
  
27cf78414709:	
  Image	
  successfully	
  pushed	
  
b750fe79269d:	
  Image	
  successfully	
  pushed	
  
46a6f0556e96:	
  Image	
  successfully	
  pushed	
  
ba4030995701:	
  Image	
  successfully	
  pushed	
  
6fdf06372117:	
  Image	
  successfully	
  pushed	
  
a6dd4adbb425:	
  Image	
  successfully	
  pushed	
  
Pushing	
  tags	
  for	
  rev	
  [a6dd4adbb425]	
  on	
  {hgp://localhost:5000/v1/repositories/
redis_hagzag/tags/latest}	
  
The Deployment workflow
●  Provide docker-registry service / interface
●  Monitoring & Logging facilities
●  Data binding / persistent configuration
Our service

Docker	
  

•  Using	
  –name	
  &	
  -­‐link	
  
•  Linking	
  containers	
  by	
  
reference	
  (not	
  ip)	
  

Host	
  /	
  VM	
  	
  

build	
  run	
  +	
  -­‐name,	
  build	
  run	
  +	
  -­‐link	
  tag	
  =	
  complete	
  “.service”	
  on	
  a	
  single	
  node	
  
Docker run & ps
docker	
  run	
  -­‐name	
  redis	
  -­‐d	
  a6dd4adbb425	
  
	
  
	
  
	
  
docker	
  ps	
  

CONTAINER	
  ID	
  	
  	
  	
  	
  	
  	
  	
  IMAGE	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  COMMAND	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  CREATED	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  STATUS	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  PORTS	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  NAMES	
  
9026507ef675	
  	
  	
  	
  	
  	
  	
  	
  a6dd4adbb425	
  	
  /usr/bin/redis-­‐serve	
  	
  	
  12	
  minutes	
  ago	
  	
  	
  	
  	
  	
  Up	
  12	
  minutes	
  	
  	
  	
  	
  	
  	
  6379/tcp	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
redis	
  
7e88dcb96856	
  	
  	
  	
  	
  	
  	
  	
  registry:0.6.1	
  	
  	
  	
  	
  	
  /bin/sh	
  -­‐c	
  cd	
  /docke	
  	
  	
  9	
  days	
  ago	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Up	
  40	
  minutes	
  	
  	
  	
  	
  	
  	
  0.0.0.0:5000-­‐>5000/
tcp	
  	
  	
  condescending_thompson	
  

	
  
Docker inspect
docker	
  inspect	
  redis	
  
	
  
	
  
	
  
What we achieved ?
docker	
  push	
  <reg-­‐name>/app-­‐1	
  

docker	
  pull	
  <reg-­‐name>/app-­‐1	
  

take	
  tag	
  “latest”	
  of	
  app	
  A	
  

In container responsibility
●  Latest code
●  Dependencies

Out container responsibility
●  Security & Remote access
●  Logging
●  Monitoring
●  Networking

Immutability ? - not just yet … but we are getting close
Evolving with Docker
DevEnv	
  
• 
• 
• 
• 

FIG	
  
Vagrant	
  –	
  buggy	
  
Chef-­‐docker	
  (hgps://github.com/bflad/chef-­‐docker)	
  	
  
Chef	
  Docker	
  registry	
  (
hgp://community.opscode.com/cookbooks/docker-­‐registry)	
  	
  

OpsEnv	
  
•  Chef-­‐docker	
  (hgps://github.com/bflad/chef-­‐docker)	
  	
  
•  Chef	
  Docker	
  registry	
  (
hgp://community.opscode.com/cookbooks/docker-­‐registry)	
  	
  
•  Puppet	
  docker	
  (hgp://forge.puppetlabs.com/garethr/docker)	
  	
  
•  DOTCLOUDS	
  (focke	
  authors)	
  –	
  About	
  to	
  base	
  PASS	
  based	
  on	
  Docker	
  
Search for “Dockerfile”
A nodejs container …
Heroku like with Docker = Dokku

hgps://github.com/progrium/dokku	
  
Heroku like
with LXC + Chef = Diez

hgp://deis.io/	
  

hgps://github.com/opdemand/deis	
  
To Summarize
•  Very promising & almost J production ready
•  A great complementary to existing CM tooling
•  Simplifies deployment (I know it doesn’t seem so)
	
  

text
Thank You
Haggai	
  Philip	
  Zagury	
  
Email:	
  hagzag@Jkalk.com	
  

More Related Content

PDF
Continuous Integration and Kamailio
PPTX
Building Images
PPTX
Mesos swam-kubernetes-vds-02062017
PDF
Docker - From Walking To Running
PPTX
Ksplice - Keep your Database systems up to date with no downtime
PDF
Introduction to docker security
PDF
Docker for Java Developers
PDF
Fedora Atomic Host
Continuous Integration and Kamailio
Building Images
Mesos swam-kubernetes-vds-02062017
Docker - From Walking To Running
Ksplice - Keep your Database systems up to date with no downtime
Introduction to docker security
Docker for Java Developers
Fedora Atomic Host

What's hot (20)

PDF
Puppet and Vagrant in development
PDF
Techtalks: taking docker to production
PDF
dockerizing web application
PDF
Continuous Integration and DevOps with Open Build Service(OBS)
PDF
Make Accelerator Pluggable for Container Engine
PDF
A Hitchhiker's Guide to Cloud Native Java EE
PDF
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
PDF
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
PPTX
Docker 1.11 Presentation
PDF
Bare Metal to OpenStack with Razor and Chef
PDF
Docker 101 2015-05-28
PPTX
Docker for Developers - Sunshine PHP
PPTX
OpenStack Summit 2013 Hong Kong - OpenStack and Windows
PDF
Docker security introduction-task-2016
PPTX
From Docker to Production - SunshinePHP 2017
PDF
青云虚拟机部署私有Docker Registry
PDF
Deploying containers and managing them on multiple Docker hosts, Docker Meetu...
PPTX
Vagrant crash course
PDF
[workshop] The Revolutionary WebRTC
PDF
The state of the swarm
Puppet and Vagrant in development
Techtalks: taking docker to production
dockerizing web application
Continuous Integration and DevOps with Open Build Service(OBS)
Make Accelerator Pluggable for Container Engine
A Hitchhiker's Guide to Cloud Native Java EE
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
Docker 1.11 Presentation
Bare Metal to OpenStack with Razor and Chef
Docker 101 2015-05-28
Docker for Developers - Sunshine PHP
OpenStack Summit 2013 Hong Kong - OpenStack and Windows
Docker security introduction-task-2016
From Docker to Production - SunshinePHP 2017
青云虚拟机部署私有Docker Registry
Deploying containers and managing them on multiple Docker hosts, Docker Meetu...
Vagrant crash course
[workshop] The Revolutionary WebRTC
The state of the swarm
Ad

Similar to Docking your services_with_docker (20)

PPTX
Detailed Introduction To Docker
PDF
Developing and Deploying PHP with Docker
PDF
Docker presentasjon java bin
PDF
2016 - Easing Your Way Into Docker: Lessons From a Journey to Production
PDF
Linux Containers and Docker SHARE.ORG Seattle 2015
PDF
Docker introduction
PDF
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
PPTX
WebSphere Application Server Liberty Profile and Docker
PDF
Docker module 1
PDF
Was liberty profile and docker
PDF
OpenShift_Installation_Deep_Dive_Robert_Bohne.pdf
PPTX
Real World Experience of Running Docker in Development and Production
PPTX
Start tracking your ruby infrastructure
PDF
OpenShift 4 installation
PDF
Docker and coreos20141020b
PDF
OpenNebulaConf 2016 - OpenNebula, a story about flexibility and technological...
PPTX
Fn project quick installation guide
PDF
Docker London Meetup: Docker Engine Evolution
PDF
Docker 102 - Immutable Infrastructure
PDF
2015 05-06-elias weingaertner-docker-intro
Detailed Introduction To Docker
Developing and Deploying PHP with Docker
Docker presentasjon java bin
2016 - Easing Your Way Into Docker: Lessons From a Journey to Production
Linux Containers and Docker SHARE.ORG Seattle 2015
Docker introduction
The Docker "Gauntlet" - Introduction, Ecosystem, Deployment, Orchestration
WebSphere Application Server Liberty Profile and Docker
Docker module 1
Was liberty profile and docker
OpenShift_Installation_Deep_Dive_Robert_Bohne.pdf
Real World Experience of Running Docker in Development and Production
Start tracking your ruby infrastructure
OpenShift 4 installation
Docker and coreos20141020b
OpenNebulaConf 2016 - OpenNebula, a story about flexibility and technological...
Fn project quick installation guide
Docker London Meetup: Docker Engine Evolution
Docker 102 - Immutable Infrastructure
2015 05-06-elias weingaertner-docker-intro
Ad

More from Tikal Knowledge (20)

PDF
Clojure - LISP on the JVM
ODP
Clojure presentation
PDF
Tabtale story: Building a publishing and monitoring mobile games architecture...
PDF
Kafka short
PDF
PDF
Processing Big Data in Realtime
PDF
Who moved my_box
PDF
Writing a Fullstack Application with Javascript - Remote media player
PDF
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
PDF
Tikal's Backbone_js introduction workshop
PPTX
TCE Automation
PPTX
Tce automation-d4
ODP
Cloud computing - an insight into "how does it really work ?"
PDF
Introduction to Cloud Computing
PPT
Tikal Fuse Day Access Layer Implementation (C#) Based On Mongo Db
PDF
Ship early ship often with Django
ODP
Google App Engine
PDF
AWS Case Study
PDF
Introduction To Cloud Computing
PPT
Building Components In Flex3
Clojure - LISP on the JVM
Clojure presentation
Tabtale story: Building a publishing and monitoring mobile games architecture...
Kafka short
Processing Big Data in Realtime
Who moved my_box
Writing a Fullstack Application with Javascript - Remote media player
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
Tikal's Backbone_js introduction workshop
TCE Automation
Tce automation-d4
Cloud computing - an insight into "how does it really work ?"
Introduction to Cloud Computing
Tikal Fuse Day Access Layer Implementation (C#) Based On Mongo Db
Ship early ship often with Django
Google App Engine
AWS Case Study
Introduction To Cloud Computing
Building Components In Flex3

Recently uploaded (20)

PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
KodekX | Application Modernization Development
PDF
Approach and Philosophy of On baking technology
PDF
cuic standard and advanced reporting.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPT
Teaching material agriculture food technology
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
A Presentation on Artificial Intelligence
PPTX
Cloud computing and distributed systems.
DOCX
The AUB Centre for AI in Media Proposal.docx
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
KodekX | Application Modernization Development
Approach and Philosophy of On baking technology
cuic standard and advanced reporting.pdf
Unlocking AI with Model Context Protocol (MCP)
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Teaching material agriculture food technology
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
A Presentation on Artificial Intelligence
Cloud computing and distributed systems.
The AUB Centre for AI in Media Proposal.docx

Docking your services_with_docker

  • 1. FullStack Developers Israel Docking micro services with Haggai  Philip  Zagury   28.1.2014 Google Campus T.A Hosted by:
  • 3. Haggai Philip Zagury, DevOps Engineer     } { ●  ●  ●  ●  Continuous integration Continuous delivery It Operations Configuration management over 10 years of DevOps expertise
  • 4. “  I am a member of Tikal's DevOps/ALM group. With over 15 members, we meet, share, contribute and code together on a monthly basis “
  • 6. We help companies build, deliver, deploy, manage and optimize their products.
  • 8. Where are we going today     text
  • 9. How CM & Deployment changed Between Monolithic & SOA / MSA
  • 14. More Technologies More Services (API’s) More Teams
  • 15. ch team with Ea it’s own “madness”
  • 16. MONOLITHIC app deployment FABRIC   } 1  …  n   *  n   1  …  n  
  • 17. MONOLITHIC style for SOA/MSA FABRIC   } service  A   *  n   service  B   service  C  
  • 18. MONOLITHIC style for SOA/MSA Team  /  Service  A  
  • 19. MONOLITHIC style for SOA/MSA Team  /  Service  B  
  • 20. MONOLITHIC style for SOA/MSA Team  /  Service  C  
  • 21. MONOLITHIC style for SOA/MSA FABRIC   } *  n  
  • 22. text MONOLITHIC “style” System provisioning (& OS provisioning) •  Much more “base images” in order to save time   Deployment takes much longer (ad hoc configuration) •  •  Consolidate in order to save time •  Backup & Restore ? doesn’t save time :( •  Security ?
  • 23. text MONOLITHIC “style” I  need  xyz  installed   • Kernel  version  not  supported   • Other  component's  depend  on  that   • Wait  for  next  release  /  OS  upgrade  
  • 24. text More images == GB/$$/PERF Between 100MB & nGB Cost in storage … [ e.g. S3 ] Cost in performance [ VMware …]
  • 28. From library dependency runtime directory (encapsulation)
  • 29. From library dependency runtime directory (encapsulation) “.service” (hybrid)
  • 30. Choose 1 tool for the job ?! FABRIC   } service  A   *  n   service  B   service  C  
  • 31. Containers   •  OSLV  -­‐  OperaJng  System  Level  VirtualizaJon  (link)   •  API  &  tooling,  which  enable  *nix  users  to  easily   create  and  manage  system  or  applicaJon   containers.    
  • 33. text Linux Containers (LXC) - Why ? Isn't there enough container tech ? •  Solaris Zones (containers - link)   Vserver •  •  Openvz •  Chroot Why now ? •  Solaris not widely used as linux/freebsd …   Linux kernel support ( >= 2.6.27 ) •  •  Application segmentation •  We really need it !!! => “.service” era
  • 34. text Linux Containers (LXC) - Why ? Features •  Kernel namespaces [ isolated processes, network etc ]   •  Chroot & Seccomp (isolation) •  Control groups (a.k.a cgroups)   Limitation   • Only Linux !
  • 35. text Revolution – Hard/Software From  Rack  servers  =>  Blade  
  • 36. So what’s this DOCKER and why do I need it ?
  • 37. Why DOCKER ? Why? •  A wrapper for LXC •  An abstraction layer for LXC + features So Why not “plain old” LXC ? •  Portable deployments across machines •  •  •  LXC alone doesn't guarantee that ! Docker build - a “build tool” designed for portability Application centric / OS centric [ Docker’s API ] •  SHA-1 (git like) based versioning •  •  DRY / Reuse - 1 base image for many applications Sharing - index (global) or registry (private / on prem)
  • 38. text Docker ( & LXC ) Solve ! ISOLATION •  Daemon per container   Any  version  is  supported  
  • 39. text Docker ( & LXC ) Solve ! ISOLATION •  Daemon per container   SECURITY   •  Container == Independent ( user/group/service etc) •  New version == new container ( not toe trading …)
  • 40. text Docker ( & LXC ) Solve ! ISOLATION •  Daemon per container   SECURITY   •  Container == Independent ( user/group/service etc) •  New version == new container ( not toe trading …) PORTABILITY   •  Container on DEV machine => to production •  Deploy from private registry •  Rollback == latest -1
  • 41. VM  vs  Container   •  •  •  •  No hypervisor layer No lib duplication Shared kernel VMS are “heavy” •  •  •  •  5-10 x Faster Startup time VMS are “heavy” Better utilize HW (cloud)
  • 42. Docker - lightweight •  •  Reuse kernel Add functionality to a container, version it, share it
  • 43. Micro service example Docker   •  ROR  front  end   •  Key-­‐value  store   Host  /  VM    
  • 45. The developer workflow ●  How do we test locally ? { if running on windows / OSX } ●  Define an interface with operations ?
  • 46. Vagrant & Docker Vagrant.configure("2") do |config| config.vm.box = "dummy" config.vm.provider :docker do |docker| docker.image = "your/image:tag" docker.cmd = ["/path/to/your", "command"] end end vagrant  plugin  install  docker-­‐provider     -­‐  docker  friendly  vagrant  image  
  • 47. Fast,  isolated  development   environments  using  Docker.   •  Define your application’s environment •  OS •  Packages •  Configuration ! etc •  Number of machines ? •  Define a container via Dockerfile •  Use that Dockerfile to define your environment (via yaml file) web:   workfl o w      build:  .      links:        -­‐  db      ports:        -­‐  8000:8000   db:      image:  hagzag/pgsql  
  • 48. Search & Get an image docker  search  <keyword>     root@docker-­‐poc:/tmp#  docker  search  centos*6   NAME                                                              DESCRIPTION                                                                                STARS          OFFICIAL      TRUSTED   saltstack/centos-­‐6                                                                                                                                        0                                                  [OK]   salgest/centos-­‐6                                                                                                                                          0                                                  [OK]   saltstack/centos-­‐6-­‐minimal                                                                                                                      1                                                  [OK]   leifw/tokumx-­‐buildslave-­‐centos-­‐6                                                                                                          0                                                  [OK]   tenforward/centos-­‐i386                            CentOS  6  32bit  image                                                        0   hansode/rpmbuilder-­‐rhel6                        CentOS-­‐6  with  rpmdevtools                                  0   ...   hgp://index.Docker.io  
  • 49. Define your own Dockerfile  -­‐>  Redis  server  running  in  a  container     #  Docker  Image/tag   FROM                  ubuntu:12.10   #  command(s)  to  execute  on  container     RUN                        apt-­‐get  update   RUN                        apt-­‐get  -­‐y  install  redis-­‐server   #  what  port  to  listen  on   EXPOSE            6379   #  once  container  is  acJve  what  binary  to  run   ENTRYPOINT      ["/usr/bin/redis-­‐server"]  
  • 50. Docker - Choose base docker  pull  user/container-­‐name     root@docker-­‐poc:/tmp#  docker  pull  saltstack/centos-­‐6-­‐minimal   Pulling  repository  saltstack/centos-­‐6-­‐minimal   aca320b373f2:  Download  complete   f2f28f99c5fd:  Download  complete   bf9724189396:  Download  complete   e7adb01c55f6:  Download  complete   a3f13a39bbbe:  Download  complete       Git  style  “tags”   Salt  –  inside  …  
  • 51. Docker build build  from  Dockerfile       docker  build  .     Step  1  :  FROM  ubuntu:12.10    -­‐-­‐-­‐>  b750fe79269d   Step  2  :  RUN  apt-­‐get  update    -­‐-­‐-­‐>  Running  in  0d768rc284d   Fetched  9813  kB  in  20s  (481  kB/s)    -­‐-­‐-­‐>  46a6f0556e96   Step  3  :  RUN  apt-­‐get  -­‐y  install  redis-­‐server    -­‐-­‐-­‐>  Running  in  5ea88c37d21f   The  following  extra  packages  will  be  installed:      libjemalloc1   The  following  NEW  packages  will  be  installed:      libjemalloc1  redis-­‐server   0  upgraded,  2  newly  installed,  0  to  remove  and  0  not  upgraded.   Need  to  get  319  kB  of  archives.    
  • 52. Docker build …   Processing  triggers  for  ureadahead  ...    -­‐-­‐-­‐>  ba4030995701   Step  4  :  EXPOSE  6379    -­‐-­‐-­‐>  Running  in  24720beda74b    -­‐-­‐-­‐>  6fdf06372117   Step  5  :  ENTRYPOINT  ["/usr/bin/redis-­‐server"]    -­‐-­‐-­‐>  Running  in  c9b9480840ad    -­‐-­‐-­‐>  a6dd4adbb425   Successfully  built  a6dd4adbb425     docker  images   REPOSITORY                                      TAG                                  IMAGE  ID                        CREATED                          VIRTUAL  SIZE   <none>                                              <none>                            a6dd4adbb425                8  minutes  ago              297.2  MB  
  • 53. Docker tag & push docker  tag  a6dd4adbb425  localhost:5000/redis_hagzag       docker  push  localhost:5000/redis_hagzag   The  push  refers  to  a  repository  [localhost:5000/redis_hagzag]  (len:  1)   Sending  image  list   Pushing  repository  localhost:5000/redis_hagzag  (1  tags)   27cf78414709:  Image  successfully  pushed   b750fe79269d:  Image  successfully  pushed   46a6f0556e96:  Image  successfully  pushed   ba4030995701:  Image  successfully  pushed   6fdf06372117:  Image  successfully  pushed   a6dd4adbb425:  Image  successfully  pushed   Pushing  tags  for  rev  [a6dd4adbb425]  on  {hgp://localhost:5000/v1/repositories/ redis_hagzag/tags/latest}  
  • 54. The Deployment workflow ●  Provide docker-registry service / interface ●  Monitoring & Logging facilities ●  Data binding / persistent configuration
  • 55. Our service Docker   •  Using  –name  &  -­‐link   •  Linking  containers  by   reference  (not  ip)   Host  /  VM     build  run  +  -­‐name,  build  run  +  -­‐link  tag  =  complete  “.service”  on  a  single  node  
  • 56. Docker run & ps docker  run  -­‐name  redis  -­‐d  a6dd4adbb425         docker  ps   CONTAINER  ID                IMAGE                              COMMAND                                CREATED                          STATUS                            PORTS                                        NAMES   9026507ef675                a6dd4adbb425    /usr/bin/redis-­‐serve      12  minutes  ago            Up  12  minutes              6379/tcp                                   redis   7e88dcb96856                registry:0.6.1            /bin/sh  -­‐c  cd  /docke      9  days  ago                    Up  40  minutes              0.0.0.0:5000-­‐>5000/ tcp      condescending_thompson    
  • 57. Docker inspect docker  inspect  redis        
  • 58. What we achieved ? docker  push  <reg-­‐name>/app-­‐1   docker  pull  <reg-­‐name>/app-­‐1   take  tag  “latest”  of  app  A   In container responsibility ●  Latest code ●  Dependencies Out container responsibility ●  Security & Remote access ●  Logging ●  Monitoring ●  Networking Immutability ? - not just yet … but we are getting close
  • 59. Evolving with Docker DevEnv   •  •  •  •  FIG   Vagrant  –  buggy   Chef-­‐docker  (hgps://github.com/bflad/chef-­‐docker)     Chef  Docker  registry  ( hgp://community.opscode.com/cookbooks/docker-­‐registry)     OpsEnv   •  Chef-­‐docker  (hgps://github.com/bflad/chef-­‐docker)     •  Chef  Docker  registry  ( hgp://community.opscode.com/cookbooks/docker-­‐registry)     •  Puppet  docker  (hgp://forge.puppetlabs.com/garethr/docker)     •  DOTCLOUDS  (focke  authors)  –  About  to  base  PASS  based  on  Docker  
  • 62. Heroku like with Docker = Dokku hgps://github.com/progrium/dokku  
  • 63. Heroku like with LXC + Chef = Diez hgp://deis.io/   hgps://github.com/opdemand/deis  
  • 64. To Summarize •  Very promising & almost J production ready •  A great complementary to existing CM tooling •  Simplifies deployment (I know it doesn’t seem so)   text
  • 65. Thank You Haggai  Philip  Zagury   Email:  hagzag@Jkalk.com