SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Docker 
and 
Puppet 
1+1=3
Jérôme Petazzoni 
(@jpetazzo) 
● Grumpy French DevOps 
– Go away or I will replace you 
with a very small shell script 
● Operated and scaled dotCloud 
– PAAS on EC2, with LXC, Puppet, 
Python, Shell, ØMQ...
Jérôme Petazzoni 
(@jpetazzo) 
● Runs everything in containers 
– VPN, firewalls 
– KVM, Xorg 
– Docker 
– … 
● Helps others to do the same 
– CONTAINERIZE 
ALL THE THINGS!!!
What is 
Docker 
The quick elevator pitch
Docker Engine 
+ Docker Hub 
= Docker Platform
Docker 
Engine
The Docker Engine 
● Open Source 
● Written in Go 
● Runs containers 
● On any modern Linux machine 
(Intel 64 bits for now)
Containers ?
Containers 
● Software delivery mechanism 
(a bit like a package!) 
● Put your application in a container, 
run it anywhere 
● A bit like a VM, but ...
I have four words for you 
● CONTAINERS boot faster 
(than VMs) 
● CONTAINERS have less overhead 
(more consolidation) 
● CONTAINERS bring native performance 
(on bare metal) 
● CONTAINERS are cloud-compatible 
(can run in VMs)
CONTAINERS 
boot faster
CONTAINERS 
have less overhead
CONTAINERS 
bring native performance
CONTAINERS 
are cloud-compatible 
Docker runs on … 
● Bare metal 
– packages, binary, CoreOS, Project Atomic, b2d... 
● Desktop VM 
– boot2docker 
● Cloud VM (Xen, ESX, KVM, HyperV...) 
– ready-to-run images on most public clouds
Docker Engine recap 
● Approximation: 
it's an hypervisor to run containers 
● Approximation: 
containers are like VMs, but lighter 
● Docker makes containers available to everybody 
(not just veterans from the last emacs/vim war)
Stop. 
Demo time.
Docker 
Hub
Docker Hub 
● Services operated by Docker Inc. 
● Library of ready-to-use container images 
● Registry for your container images 
(public or private) 
● Automated builds 
(triggered by pushes to GitHub/Bitbucket) 
● Free for public/open source code, $$ otherwise
Building 
containers
Dockerfile 
FROM ubuntu:14.04 
MAINTAINER Docker Team <education@docker.com> 
RUN apt-get update 
RUN apt-get install -y nginx 
RUN echo 'Hi, I am in your container'  
>/usr/share/nginx/html/index.html 
CMD [ "nginx", "-g", "daemon off;" ] 
EXPOSE 80
FROM ubuntu 
RUN apt-get -y update 
RUN apt-get install -y g++ 
RUN apt-get install -y erlang-dev erlang-manpages erlang-base-hipe 
... 
RUN apt-get install -y libmozjs185-dev libicu-dev libtool ... 
RUN apt-get install -y make wget 
RUN wget http://.../apache-couchdb-1.3.1.tar.gz | tar -C /tmp -zxf- 
RUN cd /tmp/apache-couchdb-* && ./configure && make install 
RUN printf "[httpd]nport = 8101nbind_address = 0.0.0.0" > 
/usr/local/etc/couchdb/local.d/docker.ini 
EXPOSE 8101 
CMD ["/usr/local/bin/couchdb"] 
docker build -t jpetazzo/couchdb .
Dockerfiles 
vs. 
Shell scripts
Shell scripts 
● OK-ish for simple stacks 
● Tricky to handle all possible situations 
(that's why we have proper config management)
Shell scripts: 
the dilemma
Run from scratch every time 
● Pros: 
– no side-effect, 100% repeatability 
● Cons: 
– create machine each time 
– provision all the things, install tons of packages... 
– takes forever 
– you will eventually get bored and give up
Run iteratively over and over 
● Pros: 
– much faster 
● Cons: 
– have to deal with leftovers of previous run 
– have to make sure everything is idempotent 
– quickly gets tedious 
– you will eventually reinvent CM
The answer: 
Dockerfiles
Best of both worlds 
● Build from scratch everytime 
(re-apply each command on top of clean build) 
● Build fast 
(by re-using snapshots of previous runs) 
● Win!
Dockerfile 
vs. 
Configuration 
Management
Configuration Management: 
the Good 
● Deals with low-level stuff 
● Abstracts some details (distro, sometimes OS) 
● Ensures convergence to a known state 
● Library of reusable, composable templates
Configuration Management: 
the Bad 
● Steep learning curve 
● Generally requires an agent 
(or something to trigger e.g. « puppet apply ») 
● Resource-intensive 
(it's OK to run the agent on a 64 GB server, 
it's less OK to run 100 agents on said server)
Configuration Management 
● Reusability is just as good as modules are 
(i.e. YMMV) 
● Not as deterministic as you think 
● Rollbacks are harder than you think 
{ 'openssl' : ensure => present } 
{ 'openssl' : ensure => '1.2.3-no-poodle-pls' }
Dockerfile 
to the rescue
Dockerfile 
● Doesn't have to deal with « low-level stuff » 
(hardware, drivers... handled by the host) 
● Doesn't need all the goodness of CM 
(because it doesn't have to converge) 
● Partial rebuilds are fast 
(layered caching rebuilds only what is needed) 
● Allows inheritance and composition 
(FROM <mycustombase>; see also: ONBUILD) 
● Easy learning curve 
(if you know Shell, you already know Dockerfile)
But... 
● Doesn't deal with « low-level stuff » 
(hardware, drivers...) 
● Doesn't define resource dependencies 
(no before/after) 
● Doesn't define what runs where
Puppet 
to the rescue
Before/After 
● Use Puppet to 
setup hardware 
(or virtual hardware), 
install packages, 
deploy code, 
run services. 
● Use Puppet to 
setup hardware 
(or virtual hardware), 
install Docker, 
run containers. 
● Use Dockerfiles 
to install packages, 
deploy code, 
run services.
Do one thing, 
and do it well
;
First things first 
https://github.com/garethr/garethr-docker 
https://forge.puppetlabs.com/garethr/docker
Installing Docker with Puppet 
include 'docker' 
class { 'docker': 
version => '1.3.1' 
}
Warm up our image collection 
# download the registry image 
docker::image { 'postgresql': 
} 
# don't download all ubuntu, 
# just '14.04' 
docker::image { 'ubuntu': 
image_tag => '14.04' 
}
Run containers 
docker::run { 'slavedb': 
image => 'jpetazzo/postgresql' 
command => '…' 
ports => ['5432', '22'], 
links => ['masterdb:master'], 
use_name => true, 
volumes => ['/var/lib/postgresql'], 
volumes_from => '420fc7e8aa20', 
memory_limit => 100000000, # bytes 
username => 'postgres', 
hostname => 'sdb.prod.dckr.io', 
env => ['FUZZINESS=42', FOO=BAR', 'FOO2=BAR2'], 
dns => ['8.8.8.8', '8.8.4.4'], 
restart_service => true 
}
Can I use Puppet 
to build Docker 
container images?
YES
Should I use Puppet 
to build Docker 
container images?
NO
OK, 
let's do it anyway
My other VM is a container 
● write a Dockerfile to install Puppet 
● start tons of containers 
● run Puppet in them (agent, or one-shot apply) 
Good if you want a mix of containers/VM/metal 
But slower to deploy, and uses more resources
Sample Dockerfile 
FROM ubuntu:12.04 
RUN apt-get install -qy wget 
RUN mkdir /puppet 
WORKDIR /puppet 
RUN wget -q http://apt.puppetlabs.com/puppetlabs-release-precise.deb 
RUN dpkg -i puppetlabs-release-precise.deb 
RUN apt-get update -q 
RUN apt-get install -qy puppet-common 
CMD puppet agent --no-daemonize --verbose
Lightweight, portable VMs 
● Start containers instead of VMs 
– I can start 10 containers on this puny laptop! 
– You can start those 10 containers too! 
(Even though you have a totally different laptop!) 
– We can start those containers in the Cloud! 
● Deploy sshd, syslogd, crond, etc. 
– You can... But do you have to?
The revolution will be containerized 
● write a Dockerfile to install Puppet 
● … and run Puppet as part of build process 
● deploy fully baked, « golden » images 
Faster to deploy 
Easier to rollback
Sample Dockerfile 
FROM ubuntu:12.04 
RUN apt-get install -qy wget 
RUN mkdir /puppet 
WORKDIR /puppet 
RUN wget -q http://apt.puppetlabs.com/puppetlabs-release-precise.deb 
RUN dpkg -i puppetlabs-release-precise.deb 
RUN apt-get update -q 
RUN apt-get install -qy puppet-common 
ENV FACTER_HOSTNAME database42 
ADD ./site.pp /puppet/site.pp 
RUN puppet apply site.pp
Beyond 
Golden 
Containers
Separation of 
Operational 
Concerns
Wat?
What does that mean? 
● Don't rebuild your app to change logging, 
remote access, and other unrelated things 
● Have different policies in prod/dev/QA/etc 
● Ship lighter containers
Virtual Machine deployment 
● Linux base system 
● Libraries 
● Application 
● Logging 
● Backups 
● Metrics 
● ...
With configuration management 
node www { 
include common 
include web 
include logstash 
include backup 
include graphite 
}
Problems 
● Conflicts between two components 
– e.g. logging and metrics use different Java versions 
● Software certified for different distro 
– e.g. something wants RHEL 6.4 but you run Ubuntu 
● Migration from one component to another 
– example: from syslog to splunk
Container deployment 
● Linux base system 
● Docker 
● Application container 
● Logging container 
● Backups container 
● Metrics container 
● ...
More about that 
http://blog.docker.com/2014/06/why-you-dont-need- 
to-run-sshd-in-docker/ 
http://www.slideshare.net/jpetazzo/containerization 
-new-virtualization-docker-separation-operational-concerns
Thoughts...
What if we could... 
● Run the Puppet agent outside of the container 
● Run a single agent for many containers 
● Share the cost of the agent
Thank you!
Would You Like To Know More? 
● Now: ask me questions! 
● Next hour: ask me more questions! 
● Tomorrow: Docker mini-training (11am) 
● Run a containers BoF at LISA? 
● Later: www.docker.com, #docker, docker-user...

Weitere ähnliche Inhalte

Was ist angesagt?

Docker workshop
Docker workshopDocker workshop
Docker workshop
Evans Ye
 
Dockerfile basics | docker workshop #1 at Rackspace
Dockerfile basics | docker workshop #1 at RackspaceDockerfile basics | docker workshop #1 at Rackspace
Dockerfile basics | docker workshop #1 at Rackspace
dotCloud
 
Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1
Docker, Inc.
 

Was ist angesagt? (20)

Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGHDeploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
Deploying Docker (Provisioning /w Docker + Chef/Puppet) - DevopsDaysPGH
 
Austin - Container Days - Docker 101
Austin - Container Days - Docker 101Austin - Container Days - Docker 101
Austin - Container Days - Docker 101
 
Vagrant
VagrantVagrant
Vagrant
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
 
Python virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesPython virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutes
 
Dockerfile basics | docker workshop #1 at Rackspace
Dockerfile basics | docker workshop #1 at RackspaceDockerfile basics | docker workshop #1 at Rackspace
Dockerfile basics | docker workshop #1 at Rackspace
 
Vagrant crash course
Vagrant crash courseVagrant crash course
Vagrant crash course
 
Provisioning & Deploying with Docker
Provisioning & Deploying with DockerProvisioning & Deploying with Docker
Provisioning & Deploying with Docker
 
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic EnvironmentDe-centralise and Conquer: Masterless Puppet in a Dynamic Environment
De-centralise and Conquer: Masterless Puppet in a Dynamic Environment
 
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
 
Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1
 
Docker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutesDocker 101 - from 0 to Docker in 30 minutes
Docker 101 - from 0 to Docker in 30 minutes
 
Django via Docker
Django via DockerDjango via Docker
Django via Docker
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)
 
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker
 
Automating Docker Containers with Puppet 2014 10-13
Automating Docker Containers with Puppet 2014 10-13Automating Docker Containers with Puppet 2014 10-13
Automating Docker Containers with Puppet 2014 10-13
 
Docker orchestration
Docker orchestrationDocker orchestration
Docker orchestration
 

Andere mochten auch (14)

STEPHEN W PACE CV 2015
STEPHEN W PACE CV 2015STEPHEN W PACE CV 2015
STEPHEN W PACE CV 2015
 
LTM NCSLMA
LTM NCSLMALTM NCSLMA
LTM NCSLMA
 
5 hikmah idul
5 hikmah idul5 hikmah idul
5 hikmah idul
 
Acoustic Duet
Acoustic Duet Acoustic Duet
Acoustic Duet
 
Navigating the future - 7 disruptors of Australia's spatial industry
Navigating the future - 7 disruptors of Australia's spatial industryNavigating the future - 7 disruptors of Australia's spatial industry
Navigating the future - 7 disruptors of Australia's spatial industry
 
Exposición de ética
Exposición de éticaExposición de ética
Exposición de ética
 
Las tic
Las ticLas tic
Las tic
 
Session 2.3 Gabeau
Session 2.3 GabeauSession 2.3 Gabeau
Session 2.3 Gabeau
 
Cirugía Bucomaxilofacial
Cirugía BucomaxilofacialCirugía Bucomaxilofacial
Cirugía Bucomaxilofacial
 
Formalpresentation2
Formalpresentation2Formalpresentation2
Formalpresentation2
 
Dorkbot Flower Power!
Dorkbot Flower Power!Dorkbot Flower Power!
Dorkbot Flower Power!
 
Ppt 4 t14 en
Ppt 4 t14 enPpt 4 t14 en
Ppt 4 t14 en
 
30120140505016 2
30120140505016 230120140505016 2
30120140505016 2
 
23
2323
23
 

Ähnlich wie Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3

Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and Containers
Docker, Inc.
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
Docker, Inc.
 
Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014
Jérôme Petazzoni
 

Ähnlich wie Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 (20)

Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
 
Introduction to Docker and Containers
Introduction to Docker and ContainersIntroduction to Docker and Containers
Introduction to Docker and Containers
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New York
 
A Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and ContainersA Gentle Introduction to Docker and Containers
A Gentle Introduction to Docker and Containers
 
Docker Intro at the Google Developer Group and Google Cloud Platform Meet Up
Docker Intro at the Google Developer Group and Google Cloud Platform Meet UpDocker Intro at the Google Developer Group and Google Cloud Platform Meet Up
Docker Intro at the Google Developer Group and Google Cloud Platform Meet Up
 
Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014Scale Big With Docker — Moboom 2014
Scale Big With Docker — Moboom 2014
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
 
Docker+java
Docker+javaDocker+java
Docker+java
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Docker_AGH_v0.1.3
Docker_AGH_v0.1.3Docker_AGH_v0.1.3
Docker_AGH_v0.1.3
 
Introduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange CountyIntroduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange County
 
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes][HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQIntroduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things Containers
 
Introduction to Project atomic (CentOS Dojo Bangalore)
Introduction to Project atomic (CentOS Dojo Bangalore)Introduction to Project atomic (CentOS Dojo Bangalore)
Introduction to Project atomic (CentOS Dojo Bangalore)
 
Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015
 

Mehr von Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
Puppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
Puppet
 

Mehr von Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Kürzlich hochgeladen (20)

AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
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
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
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
 

Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3

  • 2. Jérôme Petazzoni (@jpetazzo) ● Grumpy French DevOps – Go away or I will replace you with a very small shell script ● Operated and scaled dotCloud – PAAS on EC2, with LXC, Puppet, Python, Shell, ØMQ...
  • 3. Jérôme Petazzoni (@jpetazzo) ● Runs everything in containers – VPN, firewalls – KVM, Xorg – Docker – … ● Helps others to do the same – CONTAINERIZE ALL THE THINGS!!!
  • 4. What is Docker The quick elevator pitch
  • 5. Docker Engine + Docker Hub = Docker Platform
  • 7. The Docker Engine ● Open Source ● Written in Go ● Runs containers ● On any modern Linux machine (Intel 64 bits for now)
  • 9.
  • 10. Containers ● Software delivery mechanism (a bit like a package!) ● Put your application in a container, run it anywhere ● A bit like a VM, but ...
  • 11. I have four words for you ● CONTAINERS boot faster (than VMs) ● CONTAINERS have less overhead (more consolidation) ● CONTAINERS bring native performance (on bare metal) ● CONTAINERS are cloud-compatible (can run in VMs)
  • 14. CONTAINERS bring native performance
  • 15. CONTAINERS are cloud-compatible Docker runs on … ● Bare metal – packages, binary, CoreOS, Project Atomic, b2d... ● Desktop VM – boot2docker ● Cloud VM (Xen, ESX, KVM, HyperV...) – ready-to-run images on most public clouds
  • 16. Docker Engine recap ● Approximation: it's an hypervisor to run containers ● Approximation: containers are like VMs, but lighter ● Docker makes containers available to everybody (not just veterans from the last emacs/vim war)
  • 18.
  • 20.
  • 21. Docker Hub ● Services operated by Docker Inc. ● Library of ready-to-use container images ● Registry for your container images (public or private) ● Automated builds (triggered by pushes to GitHub/Bitbucket) ● Free for public/open source code, $$ otherwise
  • 23. Dockerfile FROM ubuntu:14.04 MAINTAINER Docker Team <education@docker.com> RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am in your container' >/usr/share/nginx/html/index.html CMD [ "nginx", "-g", "daemon off;" ] EXPOSE 80
  • 24.
  • 25. FROM ubuntu RUN apt-get -y update RUN apt-get install -y g++ RUN apt-get install -y erlang-dev erlang-manpages erlang-base-hipe ... RUN apt-get install -y libmozjs185-dev libicu-dev libtool ... RUN apt-get install -y make wget RUN wget http://.../apache-couchdb-1.3.1.tar.gz | tar -C /tmp -zxf- RUN cd /tmp/apache-couchdb-* && ./configure && make install RUN printf "[httpd]nport = 8101nbind_address = 0.0.0.0" > /usr/local/etc/couchdb/local.d/docker.ini EXPOSE 8101 CMD ["/usr/local/bin/couchdb"] docker build -t jpetazzo/couchdb .
  • 27. Shell scripts ● OK-ish for simple stacks ● Tricky to handle all possible situations (that's why we have proper config management)
  • 29. Run from scratch every time ● Pros: – no side-effect, 100% repeatability ● Cons: – create machine each time – provision all the things, install tons of packages... – takes forever – you will eventually get bored and give up
  • 30. Run iteratively over and over ● Pros: – much faster ● Cons: – have to deal with leftovers of previous run – have to make sure everything is idempotent – quickly gets tedious – you will eventually reinvent CM
  • 32. Best of both worlds ● Build from scratch everytime (re-apply each command on top of clean build) ● Build fast (by re-using snapshots of previous runs) ● Win!
  • 34. Configuration Management: the Good ● Deals with low-level stuff ● Abstracts some details (distro, sometimes OS) ● Ensures convergence to a known state ● Library of reusable, composable templates
  • 35. Configuration Management: the Bad ● Steep learning curve ● Generally requires an agent (or something to trigger e.g. « puppet apply ») ● Resource-intensive (it's OK to run the agent on a 64 GB server, it's less OK to run 100 agents on said server)
  • 36. Configuration Management ● Reusability is just as good as modules are (i.e. YMMV) ● Not as deterministic as you think ● Rollbacks are harder than you think { 'openssl' : ensure => present } { 'openssl' : ensure => '1.2.3-no-poodle-pls' }
  • 38. Dockerfile ● Doesn't have to deal with « low-level stuff » (hardware, drivers... handled by the host) ● Doesn't need all the goodness of CM (because it doesn't have to converge) ● Partial rebuilds are fast (layered caching rebuilds only what is needed) ● Allows inheritance and composition (FROM <mycustombase>; see also: ONBUILD) ● Easy learning curve (if you know Shell, you already know Dockerfile)
  • 39. But... ● Doesn't deal with « low-level stuff » (hardware, drivers...) ● Doesn't define resource dependencies (no before/after) ● Doesn't define what runs where
  • 40. Puppet to the rescue
  • 41. Before/After ● Use Puppet to setup hardware (or virtual hardware), install packages, deploy code, run services. ● Use Puppet to setup hardware (or virtual hardware), install Docker, run containers. ● Use Dockerfiles to install packages, deploy code, run services.
  • 42. Do one thing, and do it well
  • 43.
  • 44. ;
  • 45. First things first https://github.com/garethr/garethr-docker https://forge.puppetlabs.com/garethr/docker
  • 46. Installing Docker with Puppet include 'docker' class { 'docker': version => '1.3.1' }
  • 47. Warm up our image collection # download the registry image docker::image { 'postgresql': } # don't download all ubuntu, # just '14.04' docker::image { 'ubuntu': image_tag => '14.04' }
  • 48. Run containers docker::run { 'slavedb': image => 'jpetazzo/postgresql' command => '…' ports => ['5432', '22'], links => ['masterdb:master'], use_name => true, volumes => ['/var/lib/postgresql'], volumes_from => '420fc7e8aa20', memory_limit => 100000000, # bytes username => 'postgres', hostname => 'sdb.prod.dckr.io', env => ['FUZZINESS=42', FOO=BAR', 'FOO2=BAR2'], dns => ['8.8.8.8', '8.8.4.4'], restart_service => true }
  • 49. Can I use Puppet to build Docker container images?
  • 50. YES
  • 51. Should I use Puppet to build Docker container images?
  • 52. NO
  • 53. OK, let's do it anyway
  • 54. My other VM is a container ● write a Dockerfile to install Puppet ● start tons of containers ● run Puppet in them (agent, or one-shot apply) Good if you want a mix of containers/VM/metal But slower to deploy, and uses more resources
  • 55. Sample Dockerfile FROM ubuntu:12.04 RUN apt-get install -qy wget RUN mkdir /puppet WORKDIR /puppet RUN wget -q http://apt.puppetlabs.com/puppetlabs-release-precise.deb RUN dpkg -i puppetlabs-release-precise.deb RUN apt-get update -q RUN apt-get install -qy puppet-common CMD puppet agent --no-daemonize --verbose
  • 56. Lightweight, portable VMs ● Start containers instead of VMs – I can start 10 containers on this puny laptop! – You can start those 10 containers too! (Even though you have a totally different laptop!) – We can start those containers in the Cloud! ● Deploy sshd, syslogd, crond, etc. – You can... But do you have to?
  • 57. The revolution will be containerized ● write a Dockerfile to install Puppet ● … and run Puppet as part of build process ● deploy fully baked, « golden » images Faster to deploy Easier to rollback
  • 58. Sample Dockerfile FROM ubuntu:12.04 RUN apt-get install -qy wget RUN mkdir /puppet WORKDIR /puppet RUN wget -q http://apt.puppetlabs.com/puppetlabs-release-precise.deb RUN dpkg -i puppetlabs-release-precise.deb RUN apt-get update -q RUN apt-get install -qy puppet-common ENV FACTER_HOSTNAME database42 ADD ./site.pp /puppet/site.pp RUN puppet apply site.pp
  • 61. Wat?
  • 62.
  • 63. What does that mean? ● Don't rebuild your app to change logging, remote access, and other unrelated things ● Have different policies in prod/dev/QA/etc ● Ship lighter containers
  • 64. Virtual Machine deployment ● Linux base system ● Libraries ● Application ● Logging ● Backups ● Metrics ● ...
  • 65. With configuration management node www { include common include web include logstash include backup include graphite }
  • 66. Problems ● Conflicts between two components – e.g. logging and metrics use different Java versions ● Software certified for different distro – e.g. something wants RHEL 6.4 but you run Ubuntu ● Migration from one component to another – example: from syslog to splunk
  • 67. Container deployment ● Linux base system ● Docker ● Application container ● Logging container ● Backups container ● Metrics container ● ...
  • 68. More about that http://blog.docker.com/2014/06/why-you-dont-need- to-run-sshd-in-docker/ http://www.slideshare.net/jpetazzo/containerization -new-virtualization-docker-separation-operational-concerns
  • 70. What if we could... ● Run the Puppet agent outside of the container ● Run a single agent for many containers ● Share the cost of the agent
  • 72.
  • 73. Would You Like To Know More? ● Now: ask me questions! ● Next hour: ask me more questions! ● Tomorrow: Docker mini-training (11am) ● Run a containers BoF at LISA? ● Later: www.docker.com, #docker, docker-user...