Docker Docker Docker Chef

97

Click here to load reader

Transcript of Docker Docker Docker Chef

Page 1: Docker Docker Docker Chef

Docker Docker Docker Chef

Page 2: Docker Docker Docker Chef

Config Management CampGhent, BelgiumFebruary 2016

Page 3: Docker Docker Docker Chef

Sean [email protected]

@someara

Page 4: Docker Docker Docker Chef

whoami

Page 5: Docker Docker Docker Chef

Part 1

Page 6: Docker Docker Docker Chef

Remember the time

Page 7: Docker Docker Docker Chef

Remember that time we didn’t need configuration management because we had packaging?

Page 8: Docker Docker Docker Chef

Remember that time the cloud came out and we didn’t need sysadmins?

Page 9: Docker Docker Docker Chef

Remember that time when we didn’t need schemas because we had MongoDB?

Page 10: Docker Docker Docker Chef

Repeat after me

Page 11: Docker Docker Docker Chef

CONFIGURATION MANAGEMENT AND

IMMUTABLE INFRASTRUCTURE

ARE NOT MUTUALLY EXCLUSIVE

Page 12: Docker Docker Docker Chef

Say it again

Page 13: Docker Docker Docker Chef

CONFIGURATION MANAGEMENT AND

IMMUTABLE INFRASTRUCTURE

ARE NOT MUTUALLY EXCLUSIVE

Page 14: Docker Docker Docker Chef

We good?

Page 15: Docker Docker Docker Chef

The Docker cookbook

Page 16: Docker Docker Docker Chef

Configuration Management is not restricted to files, directories, packages and services

Page 17: Docker Docker Docker Chef

Configuration Management tests and repairs any programmable noun

Page 18: Docker Docker Docker Chef

Images are nouns

Page 19: Docker Docker Docker Chef

Containers are nouns

Page 20: Docker Docker Docker Chef

hello world

Page 21: Docker Docker Docker Chef

https://flic.kr/p/br26Cb

Setup v0.0.1

Page 22: Docker Docker Docker Chef

Install ChefDK

Page 23: Docker Docker Docker Chef

git clone https://github.com/someara/chef-docker-tutorial

Page 24: Docker Docker Docker Chef

kitchen test

Page 25: Docker Docker Docker Chef

git checkout v0.0.1git checkout v0.1.0git checkout v0.1.1git checkout v0.2.0git checkout v0.2.1git checkout v0.3.0git checkout v0.3.1

Page 26: Docker Docker Docker Chef

https://flic.kr/p/s684tk

Feature v0.1.0

Page 27: Docker Docker Docker Chef

metadata.rb

Page 28: Docker Docker Docker Chef

.kitchen.yml

Page 29: Docker Docker Docker Chef

recipes/hello.rb

Page 30: Docker Docker Docker Chef

kitchen converge hellokitchen login hello

docker imagesdocker ps -adocker logs hello-world

Page 31: Docker Docker Docker Chef

git add . git commit -a -m “v0.1.0 - hello”git tag v0.1.0

Page 32: Docker Docker Docker Chef

https://flic.kr/p/53stX2

Patch v0.1.1

Page 33: Docker Docker Docker Chef

Bug report: “hello is not idempotent”

Page 34: Docker Docker Docker Chef

kitchen converge hellokitchen converge hello

Page 35: Docker Docker Docker Chef

kitchen login hellodocker ps -a docker logs hello-world

Page 36: Docker Docker Docker Chef

hello-world exits after every run

Page 37: Docker Docker Docker Chef

This is expected!

Page 38: Docker Docker Docker Chef

http://gliderlabs.com/

Page 39: Docker Docker Docker Chef

recipes/hello.rb

Page 40: Docker Docker Docker Chef

rubocop \&& rspec \&& kitchen test hello

Page 41: Docker Docker Docker Chef

metadata.rb

Page 42: Docker Docker Docker Chef

git add . git commit -a -m “v0.1.1 - hello”git tag v0.1.1

Page 43: Docker Docker Docker Chef

an echo server

https://flic.kr/p/6WtX6X

Page 44: Docker Docker Docker Chef

https://flic.kr/p/s684tk

Feature v0.2.0

Page 45: Docker Docker Docker Chef

Recipe work Kitchen work Behavior testing Unit Final Acceptance Commit

Page 46: Docker Docker Docker Chef

.kitchen.yml

Page 47: Docker Docker Docker Chef

recipes/echo.rb

Page 48: Docker Docker Docker Chef

Docker Containers have 40+ (and growing) runtime API options

Page 49: Docker Docker Docker Chef
Page 50: Docker Docker Docker Chef

kitchen converge echokitchen converge echokitchen login echo

docker imagesdocker ps -adocker logs an_echo_serverdocker inspect an_echo_serverecho "hi" | nc localhost 7

Page 51: Docker Docker Docker Chef

test/integration/echo/inspec/run_spec.rb

Page 52: Docker Docker Docker Chef

rubocop \&& rspec \&& kitchen test echo

Page 53: Docker Docker Docker Chef

metadata.rb

Page 54: Docker Docker Docker Chef

git add . git commit -a -m “v0.2.0 - echo”git tag v0.2.0

Page 55: Docker Docker Docker Chef

https://flic.kr/p/dRGr3t

Patch v0.2.1

Page 56: Docker Docker Docker Chef

Security team recommends a change…

Service should listen on explicitly defined interfaces

Page 57: Docker Docker Docker Chef

kitchen converge echokitchen login echonetstat -anp

Page 58: Docker Docker Docker Chef

Listening on :::7 Let’s fix that.

Page 59: Docker Docker Docker Chef

recipes/echo.rb

Page 60: Docker Docker Docker Chef

test/integration/echo/inspec/run_spec.rb

Page 61: Docker Docker Docker Chef

rubocop \&& rspec \&& kitchen test echo

Page 62: Docker Docker Docker Chef

metadata.rb

Page 63: Docker Docker Docker Chef

git add . git commit -a -m “v0.2.1 - echo patch”git tag v0.2.1

Page 64: Docker Docker Docker Chef

https://flic.kr/p/ayDujN

notifications and subscriptions

Page 65: Docker Docker Docker Chef

https://flic.kr/p/cNdyo

Feature v0.3.0

Page 66: Docker Docker Docker Chef

recipes/web.rb

Page 67: Docker Docker Docker Chef

recipes/web.rb

Page 68: Docker Docker Docker Chef

kitchen converge webkitchen converge webkitchen login webdocker imagesdocker ps -acurl localhostdocker logs bob

Page 69: Docker Docker Docker Chef

test/integration/web/inspec/run_spec.rb

Page 70: Docker Docker Docker Chef

rubocop \&& rspec \&& kitchen test web

Page 71: Docker Docker Docker Chef

metadata.rb

Page 72: Docker Docker Docker Chef

git add . git commit -a -m “v0.3.0 - web”git tag v0.3.0

Page 73: Docker Docker Docker Chef

https://flic.kr/p/o9c2G3

Patch v0.3.1

Page 74: Docker Docker Docker Chef

Marketing team recommends a change…

Bob wasn’t there.

Page 75: Docker Docker Docker Chef

kitchen converge webkitchen login webcurl localhost

Page 76: Docker Docker Docker Chef

Bob was here. Let’s fix that.

Page 77: Docker Docker Docker Chef

recipes/web.rb

Page 78: Docker Docker Docker Chef

test/integration/echo/inspec/run_spec.rb

Page 79: Docker Docker Docker Chef

rubocop \&& rspec \&& kitchen test web

Page 80: Docker Docker Docker Chef

metadata.rb

Page 81: Docker Docker Docker Chef

git add . git commit -a -m “v0.3.1 - echo patch”git tag v0.3.1

Page 82: Docker Docker Docker Chef

Part 2

Page 83: Docker Docker Docker Chef

kitchen-dokken

http://on.mtv.com/1ls5SRc

Page 84: Docker Docker Docker Chef

Experimental status Soon to be renamed something less clever

Page 85: Docker Docker Docker Chef

Removes bootstrap overhead Uses Docker volumes Chef not baked into images Works on Travis

Page 86: Docker Docker Docker Chef

https://github.com/someara/kitchen-dokken/

Page 87: Docker Docker Docker Chef

Install ChefDK chef gem install kitchen-dokken

Page 88: Docker Docker Docker Chef

git clone https://github.com/someara/hello_dokken

Page 89: Docker Docker Docker Chef

kitchen list docker ps -a

Page 90: Docker Docker Docker Chef
Page 91: Docker Docker Docker Chef

kitchen create docker ps -a

Page 92: Docker Docker Docker Chef

Chef container Data container Runner container

Page 93: Docker Docker Docker Chef

docker run \ —volumes-from chef \ —volumes-from data \ imagename \ chef-client

Page 94: Docker Docker Docker Chef

docker diff suitename

Page 95: Docker Docker Docker Chef

https://travis-ci.org/someara/etcd-cookbook

Page 96: Docker Docker Docker Chef

fin

Page 97: Docker Docker Docker Chef