Slide 1

Slide 1 text

Geoffrey Bachelet – @ubermuda A multi-container Symfony2 setup with Docker.

Slide 2

Slide 2 text

Container Engine? Based on the Linux kernel's LXC instructions Processes and resources isolation "chroot" on steroids / super lightweight VMs

Slide 3

Slide 3 text

Host OS Hypervisor Guest OS Guest OS Guest OS Guest OS App App App App Host OS Docker + LXC App App App App VMs vs Containers

Slide 4

Slide 4 text

Host OS Hypervisor Guest OS Guest OS Guest OS Guest OS App App App App Host OS Docker + LXC App App App App VMs vs Containers

Slide 5

Slide 5 text

VMs vs Containers LXC / Jails / Zones / etc Uses the host's kernel Boots in seconds 0 overhead (almost) Easy to pass around Hypervisor Boots a complete OS Boots in minutes Guest OS' overhead Several Go images

Slide 6

Slide 6 text

Install

Slide 7

Slide 7 text

$  echo  "deb  https://get.docker.io/ubuntu  docker  main"  \     >  /etc/apt/sources.list.d/docker.list   $  apt-­‐get  update   $  apt-­‐get  install  lxc-­‐docker

Slide 8

Slide 8 text

Create a container

Slide 9

Slide 9 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 10

Slide 10 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 11

Slide 11 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 12

Slide 12 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 13

Slide 13 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 14

Slide 14 text

$  docker  pull  stackbrew/ubuntu   ! $  docker  run  -­‐i  -­‐t  stackbrew/ubuntu  /bin/bash   ! root@21d86a0b8387:/#

Slide 15

Slide 15 text

credit: http:/ /docs.docker.io/en/latest/terms/image/ Image

Slide 16

Slide 16 text

credit: http:/ /docs.docker.io/en/latest/terms/image/ Container

Slide 17

Slide 17 text

Commit the container

Slide 18

Slide 18 text

root@21d86a0b8387:/#  apt-­‐get  install  nginx   root@21d86a0b8387:/#  exit   ! $  docker  ps  -­‐q  -­‐n  1   21d86a0b8387   ! $  docker  commit  21d86a0b8387  sflive/nginx   240198b750c3cc950c60005d6d24cae4fc2dbcc6c31e274574af68d4a2e8   ! $  docker  images   REPOSITORY            TAG                  IMAGE  ID   sflive/nginx          latest            240198b750c3

Slide 19

Slide 19 text

root@21d86a0b8387:/#  apt-­‐get  install  nginx   root@21d86a0b8387:/#  exit   ! $  docker  ps  -­‐q  -­‐n  1   21d86a0b8387   ! $  docker  commit  21d86a0b8387  sflive/nginx   240198b750c3cc950c60005d6d24cae4fc2dbcc6c31e274574af68d4a2e8   ! $  docker  images   REPOSITORY            TAG                  IMAGE  ID   sflive/nginx          latest            240198b750c3

Slide 20

Slide 20 text

root@21d86a0b8387:/#  apt-­‐get  install  nginx   root@21d86a0b8387:/#  exit   ! $  docker  ps  -­‐q  -­‐n  1   21d86a0b8387   ! $  docker  commit  21d86a0b8387  sflive/nginx   240198b750c3cc950c60005d6d24cae4fc2dbcc6c31e274574af68d4a2e8   ! $  docker  images   REPOSITORY            TAG                  IMAGE  ID   sflive/nginx          latest            240198b750c3

Slide 21

Slide 21 text

root@21d86a0b8387:/#  apt-­‐get  install  nginx   root@21d86a0b8387:/#  exit   ! $  docker  ps  -­‐q  -­‐n  1   21d86a0b8387   ! $  docker  commit  21d86a0b8387  sflive/nginx   240198b750c3cc950c60005d6d24cae4fc2dbcc6c31e274574af68d4a2e8   ! $  docker  images   REPOSITORY            TAG                  IMAGE  ID   sflive/nginx          latest            240198b750c3

Slide 22

Slide 22 text

root@21d86a0b8387:/#  apt-­‐get  install  nginx   root@21d86a0b8387:/#  exit   ! $  docker  ps  -­‐q  -­‐n  1   21d86a0b8387   ! $  docker  commit  21d86a0b8387  sflive/nginx   240198b750c3cc950c60005d6d24cae4fc2dbcc6c31e274574af68d4a2e8   ! $  docker  images   REPOSITORY            TAG                  IMAGE  ID   sflive/nginx          latest            240198b750c3

Slide 23

Slide 23 text

Run the image

Slide 24

Slide 24 text

$  docker  run  -­‐p  80  sflive/nginx  nginx  -­‐g  'daemon  off;'

Slide 25

Slide 25 text

$  docker  ps   CONTAINER  ID    ...    PORTS   923cb190dbc3    ...    0.0.0.0:49155-­‐>80/tcp   ! $  curl  http://localhost:49155       Welcome  to  nginx!   ...

Slide 26

Slide 26 text

$  docker  ps   CONTAINER  ID    ...    PORTS   923cb190dbc3    ...    0.0.0.0:49155-­‐>80/tcp   ! $  curl  http://localhost:49155       Welcome  to  nginx!   ...

Slide 27

Slide 27 text

Dockerfile

Slide 28

Slide 28 text

credit: http:/ /docs.docker.io/en/latest/terms/image/

Slide 29

Slide 29 text

$  cd  /project   project  $  bin/start   Loading  composer  repositories  with  package  information   Installing  dependencies  (including  require-­‐dev)  from  lock  file   ...

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

FROM  sflive/base   ENV  DEBIAN_FRONTEND  noninteractive   ! RUN  apt-­‐get  install  -­‐y  \          daemontools  curl  nginx  mysql-­‐server  redis-­‐server  \          php5-­‐cli  php5-­‐json  php5-­‐fpm  php5-­‐intl  php5-­‐mysqlnd   ! RUN  curl  -­‐sS  https://getcomposer.org/installer  |  php   RUN  mv  composer.phar  /usr/local/bin/composer   ! RUN  echo  "daemonize=no"  >  /etc/php5/fpm/pool.d/daemonize.conf   RUN  echo  "\ndaemon  off;"  >>  /etc/nginx/nginx.conf   ! ADD  vhost.conf  /etc/nginx/sites-­‐enabled/default   ADD  php.ini  /etc/php5/fpm/php.ini   ADD  php.ini  /etc/php5/cli/php.ini   ADD  my.cnf  /etc/mysql/my.cnf   ADD  services/  /srv/services   ADD  entrypoint.sh  /usr/local/bin/entrypoint.sh   ! EXPOSE  80   ! ENTRYPOINT  ["/usr/local/bin/entrypoint.sh"]

Slide 32

Slide 32 text

FROM  sflive/base   ENV  DEBIAN_FRONTEND  noninteractive

Slide 33

Slide 33 text

RUN  apt-­‐get  install  -­‐y  \          daemontools  curl  nginx  mysql-­‐server  redis-­‐server  \          php5-­‐cli  php5-­‐json  php5-­‐fpm  php5-­‐intl  php5-­‐mysqlnd   ! RUN  curl  -­‐sS  https://getcomposer.org/installer  |  php   RUN  mv  composer.phar  /usr/local/bin/composer

Slide 34

Slide 34 text

RUN  echo  "daemonize=no"  \     >  /etc/php5/fpm/pool.d/daemonize.conf   ! RUN  echo  "\ndaemon  off;"  \     >>  /etc/nginx/nginx.conf

Slide 35

Slide 35 text

ADD  vhost.conf  /etc/nginx/sites-­‐enabled/default   ADD  php.ini  /etc/php5/fpm/php.ini   ADD  php.ini  /etc/php5/cli/php.ini   ADD  my.cnf  /etc/mysql/my.cnf   ADD  services/  /srv/services   ! ADD  entrypoint.sh  /usr/local/bin/entrypoint.sh

Slide 36

Slide 36 text

ADD  vhost.conf  /etc/nginx/sites-­‐enabled/default   ADD  php.ini  /etc/php5/fpm/php.ini   ADD  php.ini  /etc/php5/cli/php.ini   ADD  my.cnf  /etc/mysql/my.cnf   ADD  services/  /srv/services   ! ADD  entrypoint.sh  /usr/local/bin/entrypoint.sh

Slide 37

Slide 37 text

EXPOSE  80   ! ENTRYPOINT  ["/usr/local/bin/entrypoint.sh"]

Slide 38

Slide 38 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf

Slide 39

Slide 39 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf

Slide 40

Slide 40 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash   exec  /usr/bin/mysqld_safe #!/bin/bash   exec  /usr/bin/nginx #!/bin/bash   exec  /usr/sbin/php5-­‐fpm

Slide 41

Slide 41 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash  -­‐e   ! if  [  !  -­‐d  /var/www  ];  then          echo  'No  application  found  in  /var/www'          exit  1;   fi   ! cd  /var/www   ! if  [  !  -­‐d  vendor  ];  then          composer  install   fi   ! if  [  -­‐f  ./init.sh  ];  then          ./init.sh   fi   ! exec  svscan  /srv/services

Slide 42

Slide 42 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash  -­‐e   ! if  [  !  -­‐d  /var/www  ];  then          echo  'No  application  found  in  /var/www'          exit  1;   fi   ! cd  /var/www   ! if  [  !  -­‐d  vendor  ];  then          composer  install   fi   ! if  [  -­‐f  ./init.sh  ];  then          ./init.sh   fi   ! exec  svscan  /srv/services

Slide 43

Slide 43 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash  -­‐e   ! if  [  !  -­‐d  /var/www  ];  then          echo  'No  application  found  in  /var/www'          exit  1;   fi   ! cd  /var/www   ! if  [  !  -­‐d  vendor  ];  then          composer  install   fi   ! if  [  -­‐f  ./init.sh  ];  then          ./init.sh   fi   ! exec  svscan  /srv/services

Slide 44

Slide 44 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash  -­‐e   ! if  [  !  -­‐d  /var/www  ];  then          echo  'No  application  found  in  /var/www'          exit  1;   fi   ! cd  /var/www   ! if  [  !  -­‐d  vendor  ];  then          composer  install   fi   ! if  [  -­‐f  ./init.sh  ];  then          ./init.sh   fi   ! exec  svscan  /srv/services

Slide 45

Slide 45 text

symfony2   ├──  Dockerfile   ├──  entrypoint.sh   ├──  my.cnf   ├──  php.ini   ├──  services   │      ├──  mysql   │      │      └──  run   │      ├──  nginx   │      │      └──  run   │      └──  php5-­‐fpm   │              └──  run   └──  vhost.conf #!/bin/bash  -­‐e   ! if  [  !  -­‐d  /var/www  ];  then          echo  'No  application  found  in  /var/www'          exit  1;   fi   ! cd  /var/www   ! if  [  !  -­‐d  vendor  ];  then          composer  install   fi   ! if  [  -­‐f  ./init.sh  ];  then          ./init.sh   fi   ! exec  svscan  /srv/services

Slide 46

Slide 46 text

$  docker  build  -­‐t  sflive/symfony2  symfony2/

Slide 47

Slide 47 text

$  docker  build  -­‐t  sflive/symfony2  symfony2/

Slide 48

Slide 48 text

$  docker  run  \     -­‐p  8000:80  \     -­‐v  /project:/var/www  \     sflive/symfony2

Slide 49

Slide 49 text

$  docker  run  \     -­‐p  8000:80  \     -­‐v  /project:/var/www  \     sflive/symfony2

Slide 50

Slide 50 text

$  docker  run  \     -­‐p  8000:80  \     -­‐v  /project:/var/www  \     sflive/symfony2

Slide 51

Slide 51 text

#!/bin/bash   docker  run  -­‐d  \     -­‐v  $(pwd):/var/www  \     -­‐p  80:80  \     -­‐-­‐cidfile  app/cache/docker.cid  \     sflive/symfony2 bin/start

Slide 52

Slide 52 text

#!/bin/bash   docker  stop  $(cat  app/cache/docker.cid) bin/stop

Slide 53

Slide 53 text

$  cd  /project   project  $  bin/start   Loading  composer  repositories  with  package  information   Installing  dependencies  (including  require-­‐dev)  from  lock  file   ...

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

Host OS THE INTERNET container nginx mysql php5-fpm

Slide 57

Slide 57 text

Multi-container setup

Slide 58

Slide 58 text

Host OS THE INTERNET nginx mysql php5-fpm /var/www /var/lib/mysql

Slide 59

Slide 59 text

Containers links

Slide 60

Slide 60 text

$  docker  run  -­‐-­‐name  redis  sflive/redis   ! $  docker  run  -­‐-­‐link  redis:foo  sflive/symfony2

Slide 61

Slide 61 text

$  docker  run  -­‐-­‐name  redis  sflive/redis   ! $  docker  run  -­‐-­‐link  redis:foo  sflive/symfony2

Slide 62

Slide 62 text

$  docker  run  -­‐-­‐name  redis  sflive/redis   ! $  docker  run  -­‐-­‐link  redis:foo  sflive/symfony2

Slide 63

Slide 63 text

$  printenv  |  grep  -­‐E  '^FOO'   FOO_PORT=tcp://172.17.0.44:6379   FOO_PORT_6379_TCP_PROTO=tcp   FOO_PORT_6379_TCP_PORT=6379   FOO_PORT_6379_TCP=tcp://172.17.0.44:6379   FOO_NAME=/crimson_squirrel9/redis   FOO_PORT_6379_TCP_ADDR=172.17.0.44

Slide 64

Slide 64 text

$  printenv  |  grep  -­‐E  '^FOO'   FOO_PORT=tcp://172.17.0.44:6379   FOO_PORT_6379_TCP_PROTO=tcp   FOO_PORT_6379_TCP_PORT=6379   FOO_PORT_6379_TCP=tcp://172.17.0.44:6379   FOO_NAME=/crimson_squirrel9/redis   FOO_PORT_6379_TCP_ADDR=172.17.0.44

Slide 65

Slide 65 text

imports:     -­‐  {  resource:  parameters.php  } app/config/config.yml

Slide 66

Slide 66 text

app/config/parameters.php setParameter(     'redis_host',     getenv('FOO_PORT_6379_TCP_ADDR')   );

Slide 67

Slide 67 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini

Slide 68

Slide 68 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini

Slide 69

Slide 69 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini FROM  sflive/base   VOLUME  ["/var/lib/mysql"]   ENTRYPOINT  ["true"]

Slide 70

Slide 70 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini FROM  sflive/base   VOLUME  ["/var/lib/mysql"]   ENTRYPOINT  ["true"]

Slide 71

Slide 71 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini #!/bin/bash   ! if  [  !  -­‐f  /var/lib/mysql/ibdata1  ];  then          mysql_install_db  >  /dev/null   fi   ! exec  /usr/bin/mysqld_safe

Slide 72

Slide 72 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini #!/bin/bash   ! if  [  !  -­‐f  /var/lib/mysql/ibdata1  ];  then          mysql_install_db  >  /dev/null   fi   ! exec  /usr/bin/mysqld_safe

Slide 73

Slide 73 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini bind-­‐address  =  0.0.0.0

Slide 74

Slide 74 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini #!/bin/bash   for  env  in  $(printenv);  do          IFS==  read  KEY  VALUE  <<<  "$env"          sed  \       -­‐e  "s,\${${KEY}},${VALUE},g"  \       -­‐i  /etc/nginx/sites-­‐enabled/default   done;   ! exec  /usr/sbin/nginx

Slide 75

Slide 75 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini location  ~  [^/]\.php(/|$)  {          fastcgi_pass  ${PHP5_PORT_9000_TCP_ADDR}:9000;          include  fastcgi_params;   }

Slide 76

Slide 76 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini location  ~  [^/]\.php(/|$)  {          fastcgi_pass  ${PHP5_PORT_9000_TCP_ADDR}:9000;          include  fastcgi_params;   }

Slide 77

Slide 77 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini RUN  sed  \     -­‐e  "s,127.0.0.1:9000,9000,"  \     -­‐i  /etc/php5/fpm/pool.d/www.conf

Slide 78

Slide 78 text

.   ├──  base   │      └──  Dockerfile   ├──  data   │      └──  Dockerfile   ├──  mysql   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  my.cnf   ├──  nginx   │      ├──  Dockerfile   │      ├──  entrypoint.sh   │      └──  vhost.conf   └──  php5          ├──  Dockerfile          └──  php.ini RUN  sed  \     -­‐e  "s,127.0.0.1:9000,9000,"  \     -­‐i  /etc/php5/fpm/pool.d/www.conf

Slide 79

Slide 79 text

$  docker  build  -­‐t  sflive/base  base/   $  docker  build  -­‐t  sflive/data  data/   $  docker  build  -­‐t  sflive/mysql  mysql/   $  docker  build  -­‐t  sflive/nginx  nginx/   $  docker  build  -­‐t  sflive/php5  php5/

Slide 80

Slide 80 text

#!/bin/bash  -­‐e   for  name  in  $(find  -­‐maxdepth  1  !  -­‐path  .  -­‐type  d);  do          docker  build  -­‐t  sflive/$(basename  $name)  -­‐-­‐rm  $name   done;

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

$  docker  run  -­‐name  data  sflive/data   ! $  docker  run  -­‐-­‐volumes-­‐from  data  -­‐name  mysql  sflive/mysql   ! $  docker  run  -­‐v  $(pwd):/var/www  -­‐name  php5  sflive/php5   ! $  docker  run  -­‐p  80:80  -­‐v  $(pwd):/var/www  \     -­‐link  php5:php5  \     -­‐link  mysql:mysql  \     sflive/nginx

Slide 83

Slide 83 text

$  docker  run  -­‐name  data  sflive/data   ! $  docker  run  -­‐-­‐volumes-­‐from  data  -­‐name  mysql  sflive/mysql   ! $  docker  run  -­‐v  $(pwd):/var/www  -­‐name  php5  sflive/php5   ! $  docker  run  -­‐p  80:80  -­‐v  $(pwd):/var/www  \     -­‐link  php5:php5  \     -­‐link  mysql:mysql  \     sflive/nginx

Slide 84

Slide 84 text

$  docker  run  -­‐name  data  sflive/data   ! $  docker  run  -­‐-­‐volumes-­‐from  data  -­‐name  mysql  sflive/mysql   ! $  docker  run  -­‐v  $(pwd):/var/www  -­‐name  php5  sflive/php5   ! $  docker  run  -­‐p  80:80  -­‐v  $(pwd):/var/www  \     -­‐link  php5:php5  \     -­‐link  mysql:mysql  \     sflive/nginx

Slide 85

Slide 85 text

No content

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

And more! • docker run -d, attach, logs, top, ... • Orchestration (Gaudi, Fig, ...) • Docker Index • Docker Remote API (dockerode, Docker-PHP, ...) • Dockerfile: USER, WORKDIR, ONBUILD, ... • ...

Slide 88

Slide 88 text

Recap. • Image: like a VM image. Contains the hard-drive (rootfs) and some configuration. • Container: a running instance of an image.

Slide 89

Slide 89 text

• You can commit a terminated container, and you get a re-usable image representing the state of that container. • Volumes are like shared directories. Containers can share zero or many volumes. • Containers can be linked to one another. Recap.

Slide 90

Slide 90 text

Thanks! https://github.com/ubermuda/sflive-docker/ Geoffrey Bachelet – @ubermuda