Slide 1

Slide 1 text

12 months of Production Time with

Slide 2

Slide 2 text

Production Always raw hardware for best performance.

Slide 3

Slide 3 text

Staging Raw hardware for quick feedback loops.

Slide 4

Slide 4 text

Fast. Repeatable. Easy.

Slide 5

Slide 5 text

Fast. Repeatable. Easy. But it only solves 1 problem well, as all real Unix tools do.

Slide 6

Slide 6 text

[x] Gerhard [x] Platform

Slide 7

Slide 7 text

[x] Gerhard [x] Platform

Slide 8

Slide 8 text

WWGD? Does things as I would do them: in a shell, over SSH.

Slide 9

Slide 9 text

Declarative nature Easy to follow & debug

Slide 10

Slide 10 text

Thin abstractions Fast feedback

Slide 11

Slide 11 text

Batteries included Point and... play!

Slide 12

Slide 12 text

$ ./bin/p $ p $ p -t docker,registry $ p -t juicer $ p -t focus -l disco -vvv

Slide 13

Slide 13 text

$ ./bin/p $ p $ p -t docker,registry $ p -t juicer $ p -t focus -l disco -vvv

Slide 14

Slide 14 text

$ ./bin/p $ p $ p -t docker,registry $ p -t juicer $ p -t focus -l disco -vvv

Slide 15

Slide 15 text

$ ./bin/p $ p $ p -t docker,registry $ p -t juicer $ p -t focus -l disco -vvv

Slide 16

Slide 16 text

$ ./bin/p $ p $ p -t docker,registry $ p -t juicer $ p -t focus -l disco -vvv

Slide 17

Slide 17 text

$ which gp > aliased to git push $ which d > aliased to docker $ which dr > aliased to docker run

Slide 18

Slide 18 text

$ which gp > aliased to git push $ which d > aliased to docker $ which dr > aliased to docker run

Slide 19

Slide 19 text

$ which gp > aliased to git push $ which d > aliased to docker $ which dr > aliased to docker run

Slide 20

Slide 20 text

The Gerhard Platform Simple solutions to production Docker challenges

Slide 21

Slide 21 text

$ which gp > aliased to git push $ which d > aliased to docker $ which dr > aliased to docker run

Slide 22

Slide 22 text

Image management dr registry localhost:5000/nginx:1.6.1

Slide 23

Slide 23 text

Service dependencies ansible-playbook runsv

Slide 24

Slide 24 text

Container supervision dr --restart runsv

Slide 25

Slide 25 text

Log management dr -v /mnt/log/nginx svlogd

Slide 26

Slide 26 text

Raw network I/O dr --net host

Slide 27

Slide 27 text

Raw disk I/O dr -v /mnt/mysql LVM... with snapshots o.O

Slide 28

Slide 28 text

Service discovery dr -p 127.0.0.1:60000:3000 SO_REUSEPORT

Slide 29

Slide 29 text

Service discovery dr -p 127.0.0.1:60000:3000 SO_REUSEPORT

Slide 30

Slide 30 text

Firewall dr -p 127.0.0.1::3306 iptables & ferm

Slide 31

Slide 31 text

Config templating dr -v /opt/nginx/conf pkill -HUP -f nginx.*master

Slide 32

Slide 32 text

App runtimes localhost:5000/ruby:2.1.2 dr -v /mnt/[app]

Slide 33

Slide 33 text

Monitoring dr --privileged New Relic & Linode Longview

Slide 34

Slide 34 text

Sysadmin tools dr --privileged htop, ntop, iptraf, dstat, vnstat ...

Slide 35

Slide 35 text

The Gerhard Platform Just how fast is it? Very.

Slide 36

Slide 36 text

The Gerhard Platform Just how fast is it? Very

Slide 37

Slide 37 text

5 minutes 14.04 base provision

Slide 38

Slide 38 text

10 minutes Cold production setup

Slide 39

Slide 39 text

2.5 minutes Warm production setup

Slide 40

Slide 40 text

15 minutes Re-create production

Slide 41

Slide 41 text

Thank you Docker For enabling my next generation Gerhard Platform

Slide 42

Slide 42 text

Thank you Ansible For letting me learn and iterate quickly, even in production

Slide 43

Slide 43 text

Perfect software is the one that you don't know well enough.

Slide 44

Slide 44 text

gerhardlazu