On Github jolicode / docker-drupal-meetup-conf
Cloisonnez vos environnements avec plaisir !
Je suis fainéant pragmatique ಠ_ಠ
...Poney, Guinness et gif animé.
Complexe ! (pensez : mise à jour, site hors ligne, résistance aux erreurs)
Préférence pour isoler complètement chaque instance de site
Un bon point !
(Julien vous fera un calin pour vous féliciter)
Nécessite un noyau linux >= 3.8
sudo apt-get update sudo apt-get install linux-image-extra-`uname -r` sudo apt-key adv […] sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list" sudo apt-get update sudo apt-get install lxc-docker
Peut s'utiliser comme un binaire "normal"
Indice : c'est rapide !
$ sudo docker run ubuntu echo "Hello World" Hello world real 0m0.131s
Peut s'utiliser comme une VM "normale" (en plus rapide)
$ sudo docker run -i -t ubuntu /bin/bash root@cb71045ed695:/# # … we are now inside a docker instance (~vagrant) # … we can do anything we want echo "toto" > /test-file
$ sudo docker commit cb71045ed695 test1 # it's commited! $ sudo docker run -i -t test1 /bin/bash # … we are inside a NEW instance but we have the changes # that have been made before the commit root@458c0347ecd3:/# cat /test-file toto $ sudo docker run test1 cat /test-file
Possible de créer une nouvelle image de conteuneur avec un script Dockerfile
From ubuntu:precise MAINTAINER Bastien Jaillot <bjaillot@jolicode.com> RUN apt-get update && apt-get install -y php5-cli
$ sudo docker build -t="meetup/php53" ./ $ sudo docker run meetup/php53 /usr/bin/php --version PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: Dec 12 2013 04:27:25)
From ubuntu:precise MAINTAINER Bastien Jaillot <bjaillot@jolicode.com> RUN apt-get update && apt-get install -y python-software-properties RUN add-apt-repository ppa:ondrej/php5-oldstable && apt-get update RUN apt-get install -y php5-cli
$ sudo docker build -t="meetup/php54" ./ $ sudo docker run meetup/php54 /usr/bin/php --version PHP 5.4.24-1+sury.org~precise+1 (cli) (built: Jan 24 2014 11:05:09)
From ubuntu:precise MAINTAINER Bastien Jaillot <bjaillot@jolicode.com> RUN apt-get update && apt-get install -y python-software-properties RUN add-apt-repository ppa:ondrej/php5 && apt-get update RUN apt-get install -y php5-cli
$ sudo docker build -t="meetup/php55" ./ $ sudo docker run meetup/php55 /usr/bin/php --version PHP 5.5.8-3+sury.org~precise+1 (cli) (built: Jan 24 2014 10:15:11)
From ubuntu:precise MAINTAINER Bastien Jaillot <bjaillot@jolicode.com> RUN apt-get update && apt-get install -y wget RUN wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add - RUN echo deb http://dl.hhvm.com/ubuntu precise main | tee /etc/apt/sources.list.d/hhvm.list RUN apt-get update && apt-get -y install hhvm-nightly
$ sudo docker build -t="meetup/php55" ./ $ sudo docker run meetup/hhvm hhvm --version HipHop VM 2.4.0-dev+2014.01.28 (rel)
Pas *si* facile que ça, car nous n'avons pas accès en écriture à l'index docker public
$ sudo docker push test1 $ sudo docker pull test1
Projet drupal…, vieux dockerfile
FROM tianon/debian:wheezy MAINTAINER Bastien Jaillot <bjaillot@jolicode.com> RUN apt-get update RUN DEBIAN_FRONTEND=noninteractive apt-get -y install curl RUN echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list RUN echo "deb http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list RUN curl http://www.dotdeb.org/dotdeb.gpg | apt-key add - RUN apt-get update # Basic Requirements RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server mysql-client nginx php5-fpm php5-mysql pwgen python-setuptools curl git-core unzip php5-curl php5-gd php5-intl php-pear php-http php5-imap php5-redis redis-server drush mc && apt-get clean # Make mysql listen on the outside RUN sed -i "s/^bind-address/#bind-address/" /etc/mysql/my.cnf # nginx config RUN sed -i -e"s/keepalive_timeout\s*65/keepalive_timeout 2/" /etc/nginx/nginx.conf RUN echo "daemon off;" >> /etc/nginx/nginx.conf # php-fpm config RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php5/fpm/php.ini RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf RUN find /etc/php5/cli/conf.d/ -name "*.ini" -exec sed -i -re 's/^(\s*)#(.*)/\1;\2/g' {} \; # redis config RUN sed -i -e "s/daemonize\s*yes/daemonize no/g" /etc/redis/redis.conf # Supervisor Config RUN /usr/bin/easy_install supervisor ADD ./templates/supervisord.conf /etc/supervisord.conf # nginx site conf ADD ./templates/nginx-site.conf /etc/nginx/sites-available/default # Retrieve drupal RUN mkdir /var/www/ ; cd /var/www ; git clone -b master --single-branch --depth 1 git@github.com:<repo> project RUN chmod a+w /var/www/project/drupal/sites/default ; chown -R www-data:www-data /var/www/ # Drupal Initialization and Startup Script ADD ./templates/init.sh /init.sh RUN chmod 755 /init.sh RUN ./init.sh # private expose EXPOSE 80 CMD ["/usr/local/bin/supervisord", "-n"]
Fichier de config de sites à créer
codename;port;dnsname master;49078;master.toto.fr demo;49079;demo.toto.fr bastien;49080;bastien.toto.fr
lancement d'instances
$ docker build -t="drupal-saas" ./ for line in csv: instance_id = docker ps | grep line.port $ docker stop <instance_id> $ docker run -t -i -d -p <line.port>:80 \ -v="<path>/<line.codename>":"/var/www/project/drupal/sites/default/files" \ drupal-saas $ # update vhost with mapping => line.dnsname proxy on line.port $ sudo service nginx reload
Vous connaissez / appréciez TravisCI ?
Openstack + Docker
Si vous n'êtes pas sur un linux récent, vous avez deux solutions :
Bastien Jaillot / @bastnic coucou@jolicode.com
http://jolicode.github.io/docker-drupal-meetup-conf
PS : on recrute ♥