SlideShare a Scribd company logo
Vagrant move over, here is Docker
PHPBenelux Wednesday, October 22, 2014
Vagrant move over, here is Docker
** VVaaggrraanntt iiss aa MMaannaaggeerr ffoorr VVMMss 
** VVaaggrraanntt iiss AAWWEESSOOMMEE!! 
** VVaaggrraanntt SSiimmpplliiffiieedd oouurr lliivveess ttrreemmeennddoouussllyy
Vagrant move over, here is Docker
● ** sseerrvveerr vviirrttuuaalliizzaattiioonn iiss ssllooww 
● ** hhaarrdd ttoo ddiissttrriibbuuttee ((ccoommppaarreedd ttoo ddoocckkeerr)) 
● ** bbaassee bbooxx ++ vvaaggrraanntt pprroovviissiioonn ((ppuuppppeett,, aannssiibbllee,, 
ssaallttssttaacckk)) 
● ** vvaaggrraanntt ppaacckkaaggee ----bbaassee [[hhaasshh]] ----oouuttppuutt 
[[bbooxxnnaammee..bbooxx]] 
● ** ffiixxeedd mmeemmoorryy ccoonnssuummppttiioonn
● ** ddiisskk ssppaaccee hhoogg 
● ** sseerrvviiccee iinnssttaallll // rreemmoovvee ttrriiaallss aarree 
eexxppeennssiivvee 
● ** ddeessttrrooyy ++ uupp iiss ccooffffeeee ttiimmee 
● ** hhyyppeerrvviissoorr aabbssttrraaccttss aann eennttiirree ddeevviiccee 
● ** eexxppeennssiivvee eemmuullaattiinngg vviirrttuuaall hhaarrddwwaarree
IItt aaiinn''tt aallll bbaadd!! 
** EExxcceelllleenntt ffoorr mmaannuuaall tteessttiinngg 
** EExxcceelllleenntt ffoorr SSeelleenniiuumm GGrriidd 
** EExxcceelllleenntt ffoorr ttaakkiinngg aann OOSS tteesstt ddrriivvee 
** EExxcceelllleenntt ffoorr rruunnnniinngg nnoonn lliinnuuxx aappppss 
** AAnndd pprroobbaabbllyy aa lloott mmoorree!! 
BBuutt iitt aaiinn''tt ggoooodd ffoorr ......
RRuunnnniinngg oorr 
ddeevveellooppiinngg 
aa LLiinnuuxx 
aapppplliiccaattiioonn
PPuurrrriinngg pp oowweerr!!!!!!
"Docker iiss aann ooppeenn ppllaattffoorrmm ffoorr ddeevveellooppeerrss 
aanndd ssyyssaaddmmiinnss ttoo bbuuiilldd,, sshhiipp,, aanndd rruunn 
ddiissttrriibbuutteedd aapppplliiccaattiioonnss..""
* dedicated tool to help build ssttaabbllee aapppplliiccaattiioonn 
eennvviirroonnmmeennttss 
** ddiissttrriibbuuttee tthhoossee eennvviirroonnmmeennttss eeaassiillyy 
** llooww ccoosstt iinnssttaallll // rreemmoovvee sseerrvviicceess
> whoami_ 
* built on top of LLXXCC ((ccoonnttaaiinneerr tteecchhnnoollooggyy)).. 
** uusseess ffiillee ssyysstteemm,, ssttoorraaggee,, CCPPUU,, RRAAMM,, aanndd ssoo oonn 
** jjuusstt aabbssttrraacctt tthhee ooppeerraattiinngg ssyysstteemm kkeerrnneell
> ls effect_ 
** mmoorree eeffffiicciieenntt iinn rreessoouurrccee tteerrmmss 
** lleeaavvee bbeehhiinndd 9999..99%% VVMM jjuunnkk 
** 44-66 ttiimmeess mmoorree sseerrvveerr aapppplliiccaattiioonn iinnssttaanncceess
Terminology 
* Image 
* Container 
* Repository 
* Registry
Vagrant move over, here is Docker
Vagrant move over, here is Docker
We don't need no stinking
We Need a Dockerfile 
nickbelhomme/apache nickbelhomme/foo 
FROM debian:wheezy 
MAINTAINER Nick Belhomme, 
contact@nickbelhomme.com 
RUN apt-get update 
RUN apt-get install -y apache2 wget 
vim curl 
# expose the ports 
EXPOSE 80 
FROM nickbelhomme/apache 
RUN a2enmod rewrite 
RUN apt-get install -y php5-common 
libapache2-mod-php5 php5-cli php5- 
intl php5-curl php5-pgsql 
ADD dev/apache/application.conf 
/etc/apache2/sites-available/ 
application.conf 
RUN a2ensite application.conf
Vagrant move over, here is Docker
Actually we Need multiple Dockerfiles 
1 FOR APACHE (+ PHP) 
1 FOR a DB 
1 PER Application 
1 FOR NODE 
1 FOR VARNISH 
1 FOR MEMCACHED 
1 FOR REDIS 
1 FOR ... 
Or use the Registry for pre-build images
Forge together 
Using 
Containers 
docker run -d -P --name postgres nickbelhomme/postgres 
docker run -d --link postgres:postgres --name applicationFoo -v 
/home/nick/vhosts/foo/application:/var/www/vhosts/local.foo.com -p 49101:80 
nickbelhomme/foo /usr/sbin/apachectl -D FOREGROUND
> docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
e39 node:latest "grunt watch" 5 days ago Up 2 seconds applicationFoo-grunt 
a2d applicationFoo:latest "apachectl 2 weeks ago Up 2 seconds 49101->80/tcp applicationFoo 
bda postgres:latest "/usr/lib/postgresql 4 weeks ago Up 3 seconds 49155->5432/tcp 
fooBar/postgres,applicationFoo/postgres,gooBar/postgres,postgres 
http://local.foo.com:49101 
/etc/hosts => Docker0-ip local.foo.com
> docker run --rm --link postgres:postgres nickbelhomme/postgres env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=0bda3edb485e 
POSTGRES_PORT=tcp://10.66.33.13:5432 
POSTGRES_PORT_5432_TCP=tcp://10.66.33.13:5432 
POSTGRES_PORT_5432_TCP_ADDR=10.66.33.13 
POSTGRES_PORT_5432_TCP_PORT=5432 
POSTGRES_PORT_5432_TCP_PROTO=tcp 
POSTGRES_NAME=/loving_colden/postgres 
HOME=/var/lib/postgresql 
<?php host=' . getenv('POSTGRES_PORT_5432_TCP_ADDR') ?>
> docker logs –follow applicationFoo-grunt 
Done, without errors. 
Completed in 0.438s at Wed Oct 15 2014 19:06:28 GMT+0000 (UTC) - Waiting... 
OK 
>> File "rawJs/foo/form.js" changed. 
Running "concat:js" (concat) task 
File "./public/js/source.js" created. 
Done, without errors. 
Completed in 0.458s at Wed Oct 15 2014 19:11:34 GMT+0000 (UTC) - Waiting... 
Running "watch" task
> docker start postgres applicationFoo applicationFoo-grunt 
> docker stop postgres applicationFoo applicationFoo-grunt 
#!/bin/bash 
if [ "$1" = "start" ]; then 
docker start postgres applicationFoo applicationFoo-grunt 
exit 
fi 
if [ "$1" = "db" ]; then 
docker run --rm --link postgres:postgres nickbelhomme/postgres env 
exit 
fi 
if [ "$1" = "grunt" ]; then 
docker logs --follow applicationFoo-grunt 
exit 
fi 
> ./project start 
> ./project stop 
> ./project grunt 
> ./project ...
Team distribution
> docker login 
> docker push nickbelhomme/postgres 
> docker pull nickbelhomme/postgres 
> docker run [options] [container] 
> develop
Now some bad 
ass Super hero 
Tips
> docker build -t nickbelhomme/foo . 
> docker build –no-cache=true 
> docker run --name applicationFoo 
> docker run –rm ... 
> docker run -w /var/www/vhosts/local.foo.com 
> docker run -i -t nickbelhomme/foo /bin/bash 
> docker run -v hostDir:containerDir
> docker rm $(docker ps -a -q) 
> docker rmi $(docker images -a -q) 
> docker rmi $(docker images -q --filter "dangling=true")
Change the default Docker network address 
> cat /etc/default/docker 
# Docker Upstart and SysVinit configuration file 
# Customize location of Docker binary (especially for development testing). 
#DOCKER="/usr/local/bin/docker" 
# Use DOCKER_OPTS to modify the daemon startup options. 
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" 
DOCKER_OPTS="—bip=10.66.33.10/24" 
# If you need Docker to use an HTTP proxy, it can also be specified here. 
#export http_proxy="http://127.0.0.1:3128/" 
# This is also a handy place to tweak where Docker's temporary files go. 
#export TMPDIR="/mnt/bigdrive/docker-tmp"
Vagrant move over, here is Docker
Vagrant move over, here is Docker
*Mounting volumes absolute FROM GUEST 
docker run -v /c/Users:containerPath 
* hosts file need to be set with 192.168.59.103
Lightweight Tiny Core Linux made for Docker containers. 
Runs completely from RAM, weighs ~27MB, boots in ~5s
Remember: 
Keep your docker 
Images single 
responsibility 
http://blog.nickbelhomme.com | https://joind.in/12295

More Related Content

PDF
Laravel 4 package development
PDF
Zend Framework 1.8 workshop
ODP
PHP Quality Assurance Workshop PHPBenelux
PDF
Nginx pres
PPTX
PHP & JavaScript & CSS Coding style
PDF
Dependencies Managers in C/C++. Using stdcpp 2014
PDF
Composer the right way - SunshinePHP
PPTX
PHP Dependency Management with Composer
Laravel 4 package development
Zend Framework 1.8 workshop
PHP Quality Assurance Workshop PHPBenelux
Nginx pres
PHP & JavaScript & CSS Coding style
Dependencies Managers in C/C++. Using stdcpp 2014
Composer the right way - SunshinePHP
PHP Dependency Management with Composer

What's hot (20)

PDF
Dependency Management with Composer
PPT
Learn flask in 90mins
PPT
Composer - Package Management for PHP. Silver Bullet?
PDF
DevOps in PHP environment
PPTX
C++ for the Web
PDF
Dependency management with Composer
PDF
Gearman work queue in php
PDF
Php Dependency Management with Composer ZendCon 2016
PDF
Fighting Fear-Driven-Development With PHPUnit
PDF
Maven 3.0 at Øredev
PDF
Phing: Building with PHP
PDF
Building and deploying PHP applications with Phing
PDF
Continuous Quality Assurance
PDF
Developing and Deploying PHP with Docker
PPTX
Automated Deployment With Phing
PDF
Phing
KEY
Ant vs Phing
PDF
PECL Picks - Extensions to make your life better
PPTX
Zend con 2016 bdd with behat for beginners
PDF
Quick flask an intro to flask
Dependency Management with Composer
Learn flask in 90mins
Composer - Package Management for PHP. Silver Bullet?
DevOps in PHP environment
C++ for the Web
Dependency management with Composer
Gearman work queue in php
Php Dependency Management with Composer ZendCon 2016
Fighting Fear-Driven-Development With PHPUnit
Maven 3.0 at Øredev
Phing: Building with PHP
Building and deploying PHP applications with Phing
Continuous Quality Assurance
Developing and Deploying PHP with Docker
Automated Deployment With Phing
Phing
Ant vs Phing
PECL Picks - Extensions to make your life better
Zend con 2016 bdd with behat for beginners
Quick flask an intro to flask
Ad

Similar to Vagrant move over, here is Docker (20)

PDF
PHP selber bauen
PDF
Docker, c'est bonheur !
PPTX
Docker practice
PPTX
2012 coscup - Build your PHP application on Heroku
PPTX
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
PDF
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
PDF
Hands-On Session Docker
PPTX
Installing odoo v8 from github
PPT
Happy porting x86 application to android
PDF
Beyond Golden Containers: Complementing Docker with Puppet
PDF
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
PDF
Introduction to docker
PPTX
Running Docker in Development & Production (#ndcoslo 2015)
PDF
OSS AWS 핸즈온 강의
PDF
Docker command
PDF
mapserver_install_linux
PDF
mapserver_install_linux
PDF
mapserver_install_linux
PDF
mapserver_install_linux
PDF
The Modern Developer Toolbox
PHP selber bauen
Docker, c'est bonheur !
Docker practice
2012 coscup - Build your PHP application on Heroku
A to Z of a Multi-platform Docker Swarm: Building, Shipping, and Running Mult...
From Arm to Z: Building, Shipping, and Running a Multi-platform Docker Swarm ...
Hands-On Session Docker
Installing odoo v8 from github
Happy porting x86 application to android
Beyond Golden Containers: Complementing Docker with Puppet
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
Introduction to docker
Running Docker in Development & Production (#ndcoslo 2015)
OSS AWS 핸즈온 강의
Docker command
mapserver_install_linux
mapserver_install_linux
mapserver_install_linux
mapserver_install_linux
The Modern Developer Toolbox
Ad

Recently uploaded (20)

PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
cuic standard and advanced reporting.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Approach and Philosophy of On baking technology
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Big Data Technologies - Introduction.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Empathic Computing: Creating Shared Understanding
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Group 1 Presentation -Planning and Decision Making .pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Machine learning based COVID-19 study performance prediction
Advanced methodologies resolving dimensionality complications for autism neur...
cuic standard and advanced reporting.pdf
Electronic commerce courselecture one. Pdf
Approach and Philosophy of On baking technology
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Big Data Technologies - Introduction.pptx
A comparative analysis of optical character recognition models for extracting...
Encapsulation_ Review paper, used for researhc scholars
Building Integrated photovoltaic BIPV_UPV.pdf
SOPHOS-XG Firewall Administrator PPT.pptx
Tartificialntelligence_presentation.pptx
Encapsulation theory and applications.pdf
Network Security Unit 5.pdf for BCA BBA.
Empathic Computing: Creating Shared Understanding
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...

Vagrant move over, here is Docker

  • 4. ** VVaaggrraanntt iiss aa MMaannaaggeerr ffoorr VVMMss ** VVaaggrraanntt iiss AAWWEESSOOMMEE!! ** VVaaggrraanntt SSiimmpplliiffiieedd oouurr lliivveess ttrreemmeennddoouussllyy
  • 6. ● ** sseerrvveerr vviirrttuuaalliizzaattiioonn iiss ssllooww ● ** hhaarrdd ttoo ddiissttrriibbuuttee ((ccoommppaarreedd ttoo ddoocckkeerr)) ● ** bbaassee bbooxx ++ vvaaggrraanntt pprroovviissiioonn ((ppuuppppeett,, aannssiibbllee,, ssaallttssttaacckk)) ● ** vvaaggrraanntt ppaacckkaaggee ----bbaassee [[hhaasshh]] ----oouuttppuutt [[bbooxxnnaammee..bbooxx]] ● ** ffiixxeedd mmeemmoorryy ccoonnssuummppttiioonn
  • 7. ● ** ddiisskk ssppaaccee hhoogg ● ** sseerrvviiccee iinnssttaallll // rreemmoovvee ttrriiaallss aarree eexxppeennssiivvee ● ** ddeessttrrooyy ++ uupp iiss ccooffffeeee ttiimmee ● ** hhyyppeerrvviissoorr aabbssttrraaccttss aann eennttiirree ddeevviiccee ● ** eexxppeennssiivvee eemmuullaattiinngg vviirrttuuaall hhaarrddwwaarree
  • 8. IItt aaiinn''tt aallll bbaadd!! ** EExxcceelllleenntt ffoorr mmaannuuaall tteessttiinngg ** EExxcceelllleenntt ffoorr SSeelleenniiuumm GGrriidd ** EExxcceelllleenntt ffoorr ttaakkiinngg aann OOSS tteesstt ddrriivvee ** EExxcceelllleenntt ffoorr rruunnnniinngg nnoonn lliinnuuxx aappppss ** AAnndd pprroobbaabbllyy aa lloott mmoorree!! BBuutt iitt aaiinn''tt ggoooodd ffoorr ......
  • 9. RRuunnnniinngg oorr ddeevveellooppiinngg aa LLiinnuuxx aapppplliiccaattiioonn
  • 11. "Docker iiss aann ooppeenn ppllaattffoorrmm ffoorr ddeevveellooppeerrss aanndd ssyyssaaddmmiinnss ttoo bbuuiilldd,, sshhiipp,, aanndd rruunn ddiissttrriibbuutteedd aapppplliiccaattiioonnss..""
  • 12. * dedicated tool to help build ssttaabbllee aapppplliiccaattiioonn eennvviirroonnmmeennttss ** ddiissttrriibbuuttee tthhoossee eennvviirroonnmmeennttss eeaassiillyy ** llooww ccoosstt iinnssttaallll // rreemmoovvee sseerrvviicceess
  • 13. > whoami_ * built on top of LLXXCC ((ccoonnttaaiinneerr tteecchhnnoollooggyy)).. ** uusseess ffiillee ssyysstteemm,, ssttoorraaggee,, CCPPUU,, RRAAMM,, aanndd ssoo oonn ** jjuusstt aabbssttrraacctt tthhee ooppeerraattiinngg ssyysstteemm kkeerrnneell
  • 14. > ls effect_ ** mmoorree eeffffiicciieenntt iinn rreessoouurrccee tteerrmmss ** lleeaavvee bbeehhiinndd 9999..99%% VVMM jjuunnkk ** 44-66 ttiimmeess mmoorree sseerrvveerr aapppplliiccaattiioonn iinnssttaanncceess
  • 15. Terminology * Image * Container * Repository * Registry
  • 18. We don't need no stinking
  • 19. We Need a Dockerfile nickbelhomme/apache nickbelhomme/foo FROM debian:wheezy MAINTAINER Nick Belhomme, contact@nickbelhomme.com RUN apt-get update RUN apt-get install -y apache2 wget vim curl # expose the ports EXPOSE 80 FROM nickbelhomme/apache RUN a2enmod rewrite RUN apt-get install -y php5-common libapache2-mod-php5 php5-cli php5- intl php5-curl php5-pgsql ADD dev/apache/application.conf /etc/apache2/sites-available/ application.conf RUN a2ensite application.conf
  • 21. Actually we Need multiple Dockerfiles 1 FOR APACHE (+ PHP) 1 FOR a DB 1 PER Application 1 FOR NODE 1 FOR VARNISH 1 FOR MEMCACHED 1 FOR REDIS 1 FOR ... Or use the Registry for pre-build images
  • 22. Forge together Using Containers docker run -d -P --name postgres nickbelhomme/postgres docker run -d --link postgres:postgres --name applicationFoo -v /home/nick/vhosts/foo/application:/var/www/vhosts/local.foo.com -p 49101:80 nickbelhomme/foo /usr/sbin/apachectl -D FOREGROUND
  • 23. > docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e39 node:latest "grunt watch" 5 days ago Up 2 seconds applicationFoo-grunt a2d applicationFoo:latest "apachectl 2 weeks ago Up 2 seconds 49101->80/tcp applicationFoo bda postgres:latest "/usr/lib/postgresql 4 weeks ago Up 3 seconds 49155->5432/tcp fooBar/postgres,applicationFoo/postgres,gooBar/postgres,postgres http://local.foo.com:49101 /etc/hosts => Docker0-ip local.foo.com
  • 24. > docker run --rm --link postgres:postgres nickbelhomme/postgres env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=0bda3edb485e POSTGRES_PORT=tcp://10.66.33.13:5432 POSTGRES_PORT_5432_TCP=tcp://10.66.33.13:5432 POSTGRES_PORT_5432_TCP_ADDR=10.66.33.13 POSTGRES_PORT_5432_TCP_PORT=5432 POSTGRES_PORT_5432_TCP_PROTO=tcp POSTGRES_NAME=/loving_colden/postgres HOME=/var/lib/postgresql <?php host=' . getenv('POSTGRES_PORT_5432_TCP_ADDR') ?>
  • 25. > docker logs –follow applicationFoo-grunt Done, without errors. Completed in 0.438s at Wed Oct 15 2014 19:06:28 GMT+0000 (UTC) - Waiting... OK >> File "rawJs/foo/form.js" changed. Running "concat:js" (concat) task File "./public/js/source.js" created. Done, without errors. Completed in 0.458s at Wed Oct 15 2014 19:11:34 GMT+0000 (UTC) - Waiting... Running "watch" task
  • 26. > docker start postgres applicationFoo applicationFoo-grunt > docker stop postgres applicationFoo applicationFoo-grunt #!/bin/bash if [ "$1" = "start" ]; then docker start postgres applicationFoo applicationFoo-grunt exit fi if [ "$1" = "db" ]; then docker run --rm --link postgres:postgres nickbelhomme/postgres env exit fi if [ "$1" = "grunt" ]; then docker logs --follow applicationFoo-grunt exit fi > ./project start > ./project stop > ./project grunt > ./project ...
  • 28. > docker login > docker push nickbelhomme/postgres > docker pull nickbelhomme/postgres > docker run [options] [container] > develop
  • 29. Now some bad ass Super hero Tips
  • 30. > docker build -t nickbelhomme/foo . > docker build –no-cache=true > docker run --name applicationFoo > docker run –rm ... > docker run -w /var/www/vhosts/local.foo.com > docker run -i -t nickbelhomme/foo /bin/bash > docker run -v hostDir:containerDir
  • 31. > docker rm $(docker ps -a -q) > docker rmi $(docker images -a -q) > docker rmi $(docker images -q --filter "dangling=true")
  • 32. Change the default Docker network address > cat /etc/default/docker # Docker Upstart and SysVinit configuration file # Customize location of Docker binary (especially for development testing). #DOCKER="/usr/local/bin/docker" # Use DOCKER_OPTS to modify the daemon startup options. #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" DOCKER_OPTS="—bip=10.66.33.10/24" # If you need Docker to use an HTTP proxy, it can also be specified here. #export http_proxy="http://127.0.0.1:3128/" # This is also a handy place to tweak where Docker's temporary files go. #export TMPDIR="/mnt/bigdrive/docker-tmp"
  • 35. *Mounting volumes absolute FROM GUEST docker run -v /c/Users:containerPath * hosts file need to be set with 192.168.59.103
  • 36. Lightweight Tiny Core Linux made for Docker containers. Runs completely from RAM, weighs ~27MB, boots in ~5s
  • 37. Remember: Keep your docker Images single responsibility http://blog.nickbelhomme.com | https://joind.in/12295