beyond golden containers: complementing docker with puppet

46
Beyond Golden Containers Complementing Docker with Puppet David Lutterkort @lutterkort [email protected]

Upload: lutter

Post on 15-Jul-2015

246 views

Category:

Software


7 download

TRANSCRIPT

Page 1: Beyond Golden Containers: Complementing Docker with Puppet

Beyond Golden Containers Complementing Docker with Puppet

David Lutterkort @lutterkort

[email protected]

Page 2: Beyond Golden Containers: Complementing Docker with Puppet
Page 3: Beyond Golden Containers: Complementing Docker with Puppet

Brief Interlude:What even is

Configuration ?

Page 4: Beyond Golden Containers: Complementing Docker with Puppet

Any  input  to  infrastructure  is  configura)on

Page 5: Beyond Golden Containers: Complementing Docker with Puppet

Configura3on  management:    managing  those  inputs  

over  )me  at  scale

Page 6: Beyond Golden Containers: Complementing Docker with Puppet

Configura3on  management:    managing  those  inputs  

over  )me  at  scale

Page 7: Beyond Golden Containers: Complementing Docker with Puppet

Configura3on  management:    managing  those  inputs    

over  3me  at  scale

Gareth  Rushgrove                      

Page 8: Beyond Golden Containers: Complementing Docker with Puppet

http://northshorekid.com/event/campfire-stories-marini-farm

Page 9: Beyond Golden Containers: Complementing Docker with Puppet

http://www.partialhospitalization.com/2010/08/363/

Page 10: Beyond Golden Containers: Complementing Docker with Puppet

lang en_US.UTF-8 keyboard us … rootpw --iscrypted $1$uw6MV$m6VtUWPed4SqgoW6fKfTZ/ part / --size 1024 --fstype ext4 --ondisk sda

repo --name=fedora —mirrorlist=… repo --name=updates —mirrorlist=…

%packages @core %end

%post curl http://example.com/the-script.pl | /usr/bin/perl

What’s  that  machine  doing  ?

Page 11: Beyond Golden Containers: Complementing Docker with Puppet

What's  that  container  doing  ?

FROM fedora:20 MAINTAINER scollier <[email protected]>

RUN yum -y update && yum clean all RUN yum -y install couchdb && yum clean all

RUN sed \ -e 's/^bind_address = .*$/bind_address = 0.0.0.0/' \ -i /etc/couchdb/default.ini ADD local.ini /etc/couchdb/local.ini

EXPOSE 5984

CMD ["/bin/sh", "-e", "/usr/bin/couchdb", "-a", "/etc/couchdb/default.ini", "-a", "/etc/couchdb/local.ini", "-b", "-r", "5", "-R"]

Page 12: Beyond Golden Containers: Complementing Docker with Puppet

http://www.gcksa.com/en/

Page 13: Beyond Golden Containers: Complementing Docker with Puppet
Page 14: Beyond Golden Containers: Complementing Docker with Puppet
Page 15: Beyond Golden Containers: Complementing Docker with Puppet

Puppet  from  10,000  feet

Page 16: Beyond Golden Containers: Complementing Docker with Puppet

Puppet  Control  Loop

Page 17: Beyond Golden Containers: Complementing Docker with Puppet

class webserver { package { 'httpd': ensure => latest } -> file { '/etc/httpd/conf.d/local.conf': ensure => file, mode => 644, source => 'puppet:///modules/httpd/local.conf', } -> service { 'httpd': ensure => running, enable => true, subscribe => File['/etc/httpd/conf.d/local.conf'], } }

A  basic  manifest

Page 18: Beyond Golden Containers: Complementing Docker with Puppet

class webserver2 inherits webserver { File['/etc/httpd/conf.d/local.conf'] { source => 'puppet:///modules/httpd/other-local.conf', } }

Override  via  inheritance

Page 19: Beyond Golden Containers: Complementing Docker with Puppet
Page 20: Beyond Golden Containers: Complementing Docker with Puppet
Page 21: Beyond Golden Containers: Complementing Docker with Puppet
Page 22: Beyond Golden Containers: Complementing Docker with Puppet
Page 23: Beyond Golden Containers: Complementing Docker with Puppet

Managing  a  Docker  host

Page 24: Beyond Golden Containers: Complementing Docker with Puppet

Gareth  Rushgrove’s  module:            https://forge.puppetlabs.com/garethr/docker  

• Install  docker  • Manage  images  • Run  containers  • Version  3.3.2  just  released

Page 25: Beyond Golden Containers: Complementing Docker with Puppet

class { 'docker': tcp_bind => 'tcp://127.0.0.1:4243', socket_bind => 'unix:///var/run/docker.sock', version => latest }

Setting  up  Docker

Page 26: Beyond Golden Containers: Complementing Docker with Puppet

docker::image { 'ubuntu': image_tag => 'precise' }

Pulling  down  images

Page 27: Beyond Golden Containers: Complementing Docker with Puppet

docker::image { 'ubuntu': docker_file => ‘/tmp/Dockerfile’ }

Pulling  down  images

Page 28: Beyond Golden Containers: Complementing Docker with Puppet

docker::image { 'ubuntu': docker_dir => ‘/tmp/ubuntu_image’ }

Pulling  down  images

Page 29: Beyond Golden Containers: Complementing Docker with Puppet

docker::run { 'appserver2': image => 'fedora:20', command => '/usr/sbin/init', ports => ['80', '443'], links => ['mysql:db'], use_name => true, volumes => ['/var/lib/couchdb', '/var/log'], volumes_from => 'appserver1', memory_limit => 10485760, # bytes username => 'appy', hostname => 'app2.example.com', env => ['FOO=BAR', 'FOO2=BAR2'], dns => ['8.8.8.8', ‘8.8.4.4'] }

Running  containers

Page 30: Beyond Golden Containers: Complementing Docker with Puppet

docker::exec { ‘helloworld-uptime': detached => true, command => '/usr/bin/uptime', container => 'helloworld', tty => true, }

Running  containers

Page 31: Beyond Golden Containers: Complementing Docker with Puppet

Image  Building

Page 32: Beyond Golden Containers: Complementing Docker with Puppet

Dockerfile  for  puppet  apply

FROM fedora:20 MAINTAINER James Turnbull <[email protected]> ADD modules /tmp/modules RUN yum -y install puppet; \ puppet apply --modulepath=/tmp/modules \ -e "class { 'nginx': service_ensure => disable }”; \ rm -rf /tmp/modules EXPOSE 80 CMD ["nginx"]

Page 33: Beyond Golden Containers: Complementing Docker with Puppet

> puppet docker build --name lutter/myimage base.pp

Page 34: Beyond Golden Containers: Complementing Docker with Puppet

Containers  aren’t  everything

Page 35: Beyond Golden Containers: Complementing Docker with Puppet

Not  everything  is  a  container

Page 36: Beyond Golden Containers: Complementing Docker with Puppet

FROM fedora:20 MAINTAINER David Lutterkort <[email protected]> ADD puppet /tmp/puppet-docker RUN yum -y install puppet; \ /tmp/puppet-docker/bin/puppet-docker

Dockerfile  for  puppet  agent

Page 37: Beyond Golden Containers: Complementing Docker with Puppet

> tree puppet

puppet/ ├── bin │ └── puppet-docker ├── config.yaml └── ssl ├── agent-cert.pem ├── agent-private.pem ├── agent-public.pem └── ca.pem

Support  files

Page 38: Beyond Golden Containers: Complementing Docker with Puppet

> cat puppet/config.yaml

--- certname: docker.example.com server: puppet-master.example.com facts: container: docker build: true

Configure  agent  run

Page 39: Beyond Golden Containers: Complementing Docker with Puppet

FROM fedora:20 MAINTAINER David Lutterkort <[email protected]> ADD puppet /tmp/puppet-docker RUN yum -y install puppet; \ /tmp/puppet-docker/bin/puppet-docker

Dockerfile  for  puppet  agent

Page 40: Beyond Golden Containers: Complementing Docker with Puppet

> puppet docker build --name lutter/myimage

Page 41: Beyond Golden Containers: Complementing Docker with Puppet

The  Road  Ahead

Page 42: Beyond Golden Containers: Complementing Docker with Puppet

Docker  Swarm

Page 43: Beyond Golden Containers: Complementing Docker with Puppet

Docker  Machine

Page 44: Beyond Golden Containers: Complementing Docker with Puppet

Container  at  Runtime

Page 45: Beyond Golden Containers: Complementing Docker with Puppet

Correlate  Images  and  Instances

Page 46: Beyond Golden Containers: Complementing Docker with Puppet

Links

• Manage  container  hosts  with        https://forge.puppetlabs.com/garethr/docker  

• Sample  materials  for  puppet agent  etc.  at        https://github.com/lutter/puppet-­‐docker  

• Working  examples  https://github.com/garethr/puppet-­‐docker-­‐example  https://github.com/garethr/puppet-­‐docker-­‐vnext-­‐example

Questions  ?