phoenix servers with docker and nginx
DESCRIPTION
In this presentation we define the concept of Phoenix Servers, coined by Martin Fowler, and introduce Docker as a tool to achieve this idea.TRANSCRIPT
Phoenix Serverswith docker
by Nils de moor - @ndemoor
PHPBenelux March Meetup
Hello! I’m Nils De MoorCTO & cofounder at WooRank#mongo #ansible #aws #devops #dockerThat’s me!
CLEAN SERVER
INSTALLCONFIG MGMT
AGENT(CHEF, PUPPET,
ANSIBLE, bash...)
COMPOSE SCRIPTS
& RUN AGENT
SERVER in
desired STATE
Change versionEdit config fileAdd/remove libraryCreate folder/link/.......
Script, Configure, Run, Repeat...
PUSH CODE RUN TESTs BUILD
Push, Test, Build, Repeat...
CLEAN SERVER
INSTALLCONFIG MGMT
AGENT(CHEF, PUPPET,
ANSIBLE, bash...)
COMPOSE SCRIPTS
& RUN AGENT
SERVER in
desired STATE
PUSH CODE RUN TESTs BUILD
Deploy!
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 STATESERVER
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 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
desired STATE
SERVER
desired STATEdesired STATEdesired STATE
A LIBRARY NEEDS TO BE DELETED
A library needs to be removed... entirely
The config server goes down
Package managers are unavailable
System updates are “available”
What if all of this happens...
What if all of this happens...
...in production
What if all of this happens...
...in production
...while scaling up for a traffic spike
TEXT 1
TEXT 2Idempotence broken!
“THE RESULT IS A UNIQUE SNOWFLAKE. GOOD FOR A SKI RESORT,
BAD FOR A DATA CENTER.”Martin Fowler
“A SERVER SHOULD BE LIKE A PHOENIX, REGULARLY RISING FROM THE ASHES.”
Martin Fowler
IsolationPortabilityCompatibilityAutomationSpeed
“Ship anything... anywhere”
• LXC Containers• “Chroot on steroids”
• AUFS• layered view on merged directories• copy-on-write
What and how?
git clone https://github.com/ndemoor/phpbnl-demo
# Dockerfile: memcached
FROM ubuntu
# make sure the package repository is up to dateRUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.listRUN apt-get update
# install memcachedRUN apt-get install -y memcached
# run as user daemon (memcached doesn't allow to run as root)USER daemon
# expose memcached portEXPOSE 11211
# Launch memcached when launching the container# CMD [ "memcached" ]ENTRYPOINT ["memcached"]
# Dockerfile: nginx and php
FROM ubuntu
# make sure the package repository is up to dateRUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.listRUN apt-get update
# install php and nginxRUN apt-get install php5-common php5-cli php5-fpm php5-memcache php5-mcrypt nginx
RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.iniRUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
0.1
App
# Pseudo-Dockerfile: app
FROM mynamespace/nginx-php
MAINTAINER myself
ADD . /var/wwwRUN cd /var/www && install
WORKDIR /var/www
EXPOSE 80
CMD [ "./start.sh" ]
0.1
0.2
?
App
App
0.1
0.2
App
App
0.1
0.2
App
App
• Deis - deployment and orchestration• Dokku - deployment• Fig - deployment• Flynn - deployment and orchestration • Shipyard - monitoring
Community
Thank
YOU!
Thank
YOU!
Psst... we’re hiring
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