Slide 1

Slide 1 text

Phoenix Servers with docker by Nils de moor - @ndemoor PHPBenelux March Meetup

Slide 2

Slide 2 text

Hello! I’m Nils De Moor CTO & cofounder at WooRank #mongo #ansible #aws #devops #docker That’s me!

Slide 3

Slide 3 text

CLEAN SERVER INSTALL CONFIG MGMT AGENT (CHEF, PUPPET, ANSIBLE, bash...) COMPOSE SCRIPTS & RUN AGENT SERVER in desired STATE Change version Edit config file Add/remove library Create folder/link/... .... Script, Configure, Run, Repeat...

Slide 4

Slide 4 text

PUSH CODE RUN TESTs BUILD Push, Test, Build, Repeat...

Slide 5

Slide 5 text

CLEAN SERVER INSTALL CONFIG MGMT AGENT (CHEF, PUPPET, ANSIBLE, bash...) COMPOSE SCRIPTS & RUN AGENT SERVER in desired STATE PUSH CODE RUN TESTs BUILD Deploy!

Slide 6

Slide 6 text

SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE Development Test Production SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STATE SERVER in desired STAT SERVER in desired STA SERVER in desired ST SERVE in desired S SERV in desired SERV in desired SER i desire SE desir S desi des de d

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

A LIBRARY NEEDS TO BE DELETED A library needs to be removed... entirely

Slide 9

Slide 9 text

The config server goes down

Slide 10

Slide 10 text

Package managers are unavailable

Slide 11

Slide 11 text

System updates are “available”

Slide 12

Slide 12 text

What if all of this happens...

Slide 13

Slide 13 text

What if all of this happens... ...in production

Slide 14

Slide 14 text

What if all of this happens... ...in production ...while scaling up for a traffic spike

Slide 15

Slide 15 text

TEXT 1 TEXT 2 Idempotence broken!

Slide 16

Slide 16 text

“THE RESULT IS A UNIQUE SNOWFLAKE. GOOD FOR A SKI RESORT, BAD FOR A DATA CENTER.” Martin Fowler

Slide 17

Slide 17 text

“A SERVER SHOULD BE LIKE A PHOENIX, REGULARLY RISING FROM THE ASHES.” Martin Fowler

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Isolation Portability Compatibility Automation Speed “Ship anything... anywhere”

Slide 21

Slide 21 text

• LXC Containers • “Chroot on steroids” • AUFS • layered view on merged directories • copy-on-write What and how?

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

git clone https://github.com/ndemoor/phpbnl-demo

Slide 24

Slide 24 text

# Dockerfile: memcached FROM ubuntu # make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update # install memcached RUN apt-get install -y memcached # run as user daemon (memcached doesn't allow to run as root) USER daemon # expose memcached port EXPOSE 11211 # Launch memcached when launching the container # CMD [ "memcached" ] ENTRYPOINT ["memcached"]

Slide 25

Slide 25 text

# Dockerfile: nginx and php FROM ubuntu # make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update # install php and nginx RUN apt-get install php5-common php5-cli php5-fpm php5-memcache php5-mcrypt nginx RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.ini RUN echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 80

Slide 26

Slide 26 text

0.1 App

Slide 27

Slide 27 text

# Pseudo-Dockerfile: app FROM mynamespace/nginx-php MAINTAINER myself ADD . /var/www RUN cd /var/www && install WORKDIR /var/www EXPOSE 80 CMD [ "./start.sh" ]

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

0.1 0.2 ? App App

Slide 30

Slide 30 text

0.1 0.2 App App

Slide 31

Slide 31 text

0.1 0.2 App App

Slide 32

Slide 32 text

• Deis - deployment and orchestration • Dokku - deployment • Fig - deployment • Flynn - deployment and orchestration • Shipyard - monitoring Community

Slide 33

Slide 33 text

Thank YOU!

Slide 34

Slide 34 text

Thank YOU! Psst... we’re hiring

Slide 35

Slide 35 text

http://docs.docker.io http://morethanadventure.com/wp-content/uploads/2013/12/What_if.jpg http://1.bp.blogspot.com/-YPJ77li2P3o/T1O5y29ZO-I/AAAAAAAAFOo/tqRMI68FBns/s1600/Prof+Macksey %5B2%5D.jpg http://www.pingzine.com/wp-content/uploads/2012/05/serverdown.jpg http://www.abels.co.uk/wp-content/themes/abels/images/uploads/Storage/various%20005%20(2).jpg http://www.murphyslawnyc.com/wp-content/themes/000edupress/images/logo.png http://clipartist.info/clipart/xmas/snow/snowflake_stylized_XXL.png http://www.dimensionsinfo.com/wp-content/uploads/2010/03/Freight-Container-sizes.jpg http://www.swarthmore.edu/Images/administration/thephoenix/phoenix_logo_2color.gif http://labourlist.org/wp-content/uploads/2011/11/broken-chain.jpg Photo Credit