Développer et packager votre application Symfony2 avec Docker et Vagrant
-
Upload
thierry-marianne -
Category
Technology
-
view
1.853 -
download
0
description
Transcript of Développer et packager votre application Symfony2 avec Docker et Vagrant
![Page 1: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/1.jpg)
Développer et packager votreapplication Symfony2 avec
Docker et Vagrant
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
1
![Page 2: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/2.jpg)
Proposition À partir d'une application Symfony2 ayant fait ses preuves :
- Utilisateurs
- Intégration continue / déploiements automatisés
=> Passer à Docker (sans Puppet / Chef / Ansible ...)
https://github.com/thierrymarianne/symfony2-docker-vagrant
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
2
![Page 3: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/3.jpg)
Projet interne chez DotCloud, Solomon Hykes
Janvier 2014 : Levée de fond de 15M$
9 Juin 2014 : Sortie de la 1.0 à la DockerCon 2014
10 Juin 2014 : Intégration de Docker dans Google App Engine
Un peu d'histoire
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
3
![Page 4: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/4.jpg)
![Page 5: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/5.jpg)
Machines virtuelles !== Containers
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
5
![Page 6: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/6.jpg)
Développement
Intégration continue
Déploiement
Dans quels contextes utiliser Docker ?
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
6
![Page 7: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/7.jpg)
Pour le développeurDavantage d'indépendance vis à vis des Ops
Meilleure sensation d'être en production sur son poste de travail
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
7
![Page 8: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/8.jpg)
Pour l'opérationnelDavantage d'indépendance vis à vis des Devs
Faciliter la surcharge des configurations utilisées en développement
(variables d'environnements, fichiers de configuration, persistence)
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
8
![Page 9: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/9.jpg)
En pratique Container Machine ("machine virtuelle" rapide)
Container Application (rôle au sens gestion de configuration)
Container Volume de Données (point de montage)
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
9
![Page 10: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/10.jpg)
Intégration avec Vagrant En mode provider
Rôle tenu de manière traditionnel par VirtualBox / VMware
=> Container Machine
$ vagrant init [...]config.vm.provider "docker" do |d| d.image = "afup/nginx"end[...]
01.02.03.04.05.06.07.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
10
![Page 11: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/11.jpg)
"Machine virtuelle" légère ?Utilisation des images de base Phusion
/sbin/my_init (collecte des processus orphelins)
Runit à la place d'upstart (supervision de service)
Syslog-ng / logrotate
ssh
/!\ Non-recommandé par Michael Crosby
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
11
![Page 12: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/12.jpg)
Intégration avec Vagrant• Provisioning
Vagrant.configure("2") do |config| config.vm.provision "docker", images: ["afup/symfony2"]end
• Rôle aussi tenu par Shell / Puppet / Chef
=> Container Application
01.02.03.04.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
12
![Page 13: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/13.jpg)
Selon le fondateur de Docker
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
13
![Page 14: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/14.jpg)
Ou alors, Boot2Docker! Linux très léger optimisé pour lancer des containers rapidement
Installation pour OSX / Windows
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
14
![Page 15: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/15.jpg)
Comment utiliser Docker?Ligne de commande / Dockerfile
https://docs.docker.com/installation/
$ docker -h
Outils de configuration / orchestration
# pip install -U fig
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
15
![Page 16: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/16.jpg)
Application Symfony2 associée à un indexde recherche
16
![Page 17: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/17.jpg)
Le contenu de notre Dockerfile pour notre container Elasticsearch :
$ vi Dockerfile FROM tutum/elasticsearchEXPOSE 9200VOLUME ['/var/lib/elasticsearch']ENTRYPOINT ["/usr/share/elasticsearch/bin/elasticsearch"]
Ne pas réinventer la roue
01.02.03.04.05.06.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
17
![Page 18: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/18.jpg)
docker build -t afup/elasticsearch:0.1 .# => nouvelle image créée pour le référentiel# afup/elasticsearch
# Envoi sur index publicdocker push afup/elasticsearch:0.1
# Récupération à partir de l'index publicdocker pull afup/elasticsearch:0.1
Contruire une image Elasticsearch01.02.03.
01.02.
01.02.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
18
![Page 19: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/19.jpg)
docker run -d -p :9200 \--name elasticsearch-server \-v ̀pwd̀/elasticsearch:/var/lib/elasticsearch \afup/elasticsearch:0.1
Démarrer notre container à partir de l'image01.02.03.04.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
19
![Page 20: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/20.jpg)
docker run -d -p :9200 \--name elasticsearch-server \--volumes-from elasticsearch-data-volume \-v ̀pwd̀/elasticsearch:/var/lib/elasticsearch \afup/elasticsearch:0.1
Tagger notre container Elasticsearch01.02.03.04.05.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
20
![Page 21: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/21.jpg)
docker run -d -p :9200 \--name elasticsearch-server \--volumes-from elasticsearch-data-volume \-v ̀pwd̀/elasticsearch:/var/lib/elasticsearch \afup/elasticsearch:0.1
Déclarer un Container Volume de Données01.02.03.04.05.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
21
![Page 22: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/22.jpg)
Avec montage de notre application Symfony2
docker run -t -i -p 80:80 \--name php-nginx-server \--link elasticsearch-server:symfony__elasticsearch_ \-v symfony2:/var/www/symfony2 \-v ̀pwd̀/nginx/sites-enabled:/etc/nginx/sites-enabled \# [...]afup/nginx:0.1
Lancer un Container Application (nginx)
01.02.03.04.05.06.07.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
22
![Page 23: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/23.jpg)
docker run -t -i -p 80:80 \--name php-nginx-server \--link elasticsearch-server:symfony__elasticsearch_ \-v symfony2:/var/www/symfony2 \-v ̀pwd̀/nginx/sites-enabled:/etc/nginx/sites-enabled \afup/nginx:0.1
Lier nos containers Elasticsearch et nginx01.02.03.04.05.06.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
23
![Page 24: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/24.jpg)
# Définition de paramètres de configuration en yamlparameters: elasticsearch_host: %elasticsearch.host% elasticsearch_port: %elasticsearch.port% gmail_search_index: gmail twitter_search_index: twitter
Configuration de notre application01.02.03.04.05.06.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
24
![Page 25: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/25.jpg)
docker run -t -i -p 80:80 \--name php-nginx-server \--e SYMFONY__ELASTICSEARCH__HOST=127.0.0.1-v symfony2:/var/www/symfony2 \-v ̀pwd̀/nginx/sites-enabled:/etc/nginx/sites-enabled \afup/nginx:0.1
root@ad09c8a66671:# dans mon container Elasticsearchroot@ad09c8a66671:envroot@ad09c8a66671:SYMFONY__ELASTICSEARCH__HOST=127.0.0.1
Variables d'environnement (1/2)Injection d'une variable au démarrage d'un container
01.02.03.04.05.06.
01.02.03.
25
![Page 26: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/26.jpg)
docker run -t -i -p 80:80 \--name php-nginx-server \--link elasticsearch-server:symfony__elasticsearch_ \-v symfony2:/var/www/symfony2 \-v ̀pwd̀/nginx/sites-enabled:/etc/nginx/sites-enabled \afup/nginx:0.1
SYMFONY__ELASTICSEARCH__HOST <=> %elasticsearch.host%
Lier deux containers transfère les variables d'environnement
Variables d'environnement (2/2)01.02.03.04.05.06.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
26
![Page 27: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/27.jpg)
FROM ubuntu:14.04ENV DEBIAN_FRONTEND noninteractive # RUN apt-get upgrade à bannir RUN apt-get updateRUN apt-get install -y --force-yes software-properties-common
Pro Tip: Abuser des images officielles01.02.03.04.05.06.07.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
27
![Page 28: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/28.jpg)
sudo apt-get install squid-deb-proxy avahi-utils
https://github.com/yasn77/docker-squid-repo-cache.git
Pro Tip: Proxy Packages Debian (1/2)Proxy pour gestionnaire de paquets sur la machine hôte
Peut être même dans son propre container ?
01.02.03.
01.02.03.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
28
![Page 29: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/29.jpg)
RUN route -n | awk '/̂0.0.0.0/ {print $2}' > /tmp/host_ip.txtRUN echo "HEAD /" | nc ̀cat /tmp/host_ip.txt̀ 8000 | \grep squid-deb-proxy \ && (echo "Acquire::http::Proxy \"http://$(cat /tmp/host_ip.txt):8000\";" > \ /etc/apt/apt.conf.d/30proxy) \ && (echo "Acquire::http::Proxy::ppa.launchpad.net DIRECT;" >> \ /etc/apt/apt.conf.d/30proxy) \ || echo "No squid-deb-proxy detected on docker host"
Pro Tip: Proxy Packages Debian (2/2)Dans mon Dockerfile, avant l'installation de paquets :01.02.03.04.05.06.07.08.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
29
![Page 30: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/30.jpg)
RUN apt-get install -y --force-yes nginxRUN apt-get install -y --force-yes php5-fpm
Différent deRUN apt-get install -y --force-yes php5-fpmRUN apt-get install -y --force-yes nginx
Pro Tip: Tirer parti du cache de DockerDans vos Dockerfiles :
Conserver au maximum l'ordre des instructions!01.02.
01.02.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
30
![Page 31: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/31.jpg)
Pro Tip: Proxy Toran pour composerPar l'un des lead développeurs de Composer (Jordi Boggiano)
Accélérer l'installation des vendors
Sert de point de redondance avec github / référentiels privés
=> Container Application
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
31
![Page 32: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/32.jpg)
# fig.yml nginx: build: /home/afup/php-nginx links: - elasticsearch:symfony__elasticsearch_ [...] ports: - "8081:80" expose: - "80"
Et si on se débarrassait (en partie) du shell ?01.02.03.04.05.06.07.08.09.10.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
32
![Page 33: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/33.jpg)
elasticsearch: image: afup/elasticsearch:0.1 volumes_from: elasticsearch-data-volume expose: - "9200" ports: - ":9200"
Fig
Où se cache notre application Symfony2 cette fois ?
01.02.03.04.05.06.07.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
33
![Page 34: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/34.jpg)
nginx: [...] volumes: - nginx/sites-enabled:/etc/nginx/sites-enabled - symfony2:/var/www/symfony2 $ fig up
Fig01.02.03.04.05.06.07.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
34
![Page 35: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/35.jpg)
La vie des containers avec Cadvisor
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
35
![Page 36: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/36.jpg)
Aller encore plus loin avec OpenStackAvec OpenStack (cloud manager)
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
36
![Page 37: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/37.jpg)
description: > Stack Heat (Orchestration)resources: nginx: type: DockerInc::Docker::Container properties: image: afup/php-nginx:0.1 elasticsearch: type: DockerInc::Docker::Container [...]
Démarrer une "Stack" avec Heat
heat stack-create nginx -f ../openstack/php-nginx.yml
01.02.03.04.05.06.07.08.09.10.
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
37
![Page 38: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/38.jpg)
Et ce n'est que le début !Orchestration avec Maestro-Ng
Configuration visuelle avec Gaudi
Déploiement avec Deis / CoreOS
Support de Docker avec AppEngine
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
38
![Page 39: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/39.jpg)
Showtime• /!\ Effet démo en perspective !!
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
39
![Page 40: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/40.jpg)
Questions ?
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
40
![Page 41: Développer et packager votre application Symfony2 avec Docker et Vagrant](https://reader033.fdocuments.net/reader033/viewer/2022052618/554ba916b4c905b8618b527d/html5/thumbnails/41.jpg)
Sources• https://linuxcontainers.org
• http://en.wikipedia.org/wiki/Chroot
• http://en.wikipedia.org/wiki/Cgroups
• https://www.docker.io
• https://hub.docker.com/
• https://speakerdeck.com/ubermuda/a-multi-container-symfony2-setup-with-docker
• https://wiki.openstack.org/wiki/Solum
• https://speakerdeck.com/ubermuda/a-multi-container-symfony2-setup-with-docker
• http://blog.docker.com/2014/04/openstack-update-icehouse-release-update/
• https://github.com/phusion/baseimage-docker
• http://crosbymichael.com/dockerfile-best-practices.html
• https://toranproxy.com/
• http://openstack.redhat.com/Quickstart/
https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr)
41