Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Développer et packager une application Symfony2...

Développer et packager une application Symfony2 avec Docker

Présentation donnée à l'occasion du PHP Tour Lyon 2014

Thierry Marianne

June 24, 2014
Tweet

More Decks by Thierry Marianne

Other Decks in Programming

Transcript

  1. Développer et packager votre application Symfony2 avec Docker et Vagrant

    https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 1
  2. 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
  3. 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
  4. Développement Intégration continue Déploiement Dans quels contextes utiliser Docker ?

    https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 6
  5. Pour le développeur Davantage 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
  6. Pour l'opérationnel Davantage 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
  7. 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
  8. Intégration avec Vagrant En mode provider Rôle tenu de manière

    traditionnel par VirtualBox / VMware => Container Machine $ v a g r a n t i n i t [ . . . ] c o n f i g . v m . p r o v i d e r " d o c k e r " d o | d | d . i m a g e = " a f u p / n g i n x " e n d [ . . . ] 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 10
  9. "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
  10. Intégration avec Vagrant • Provisioning V a g r a

    n t . c o n f i g u r e ( " 2 " ) d o | c o n f i g | c o n f i g . v m . p r o v i s i o n " d o c k e r " , i m a g e s : [ " a f u p / s y m f o n y 2 " ] e n d • Rôle aussi tenu par Shell / Puppet / Chef => Container Application 0 1 . 0 2 . 0 3 . 0 4 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 12
  11. 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
  12. Comment utiliser Docker? Ligne de commande / Dockerfile https://docs.docker.com/installation/ $

    d o c k e r - h Outils de configuration / orchestration # p i p i n s t a l l - U f i g https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 15
  13. Le contenu de notre Dockerfile pour notre container Elasticsearch :

    $ v i D o c k e r f i l e F R O M t u t u m / e l a s t i c s e a r c h E X P O S E 9 2 0 0 V O L U M E [ ' / v a r / l i b / e l a s t i c s e a r c h ' ] E N T R Y P O I N T [ " / u s r / s h a r e / e l a s t i c s e a r c h / b i n / e l a s t i c s e a r c h " ] Ne pas réinventer la roue 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 17
  14. d o c k e r b u i l

    d - t a f u p / e l a s t i c s e a r c h : 0 . 1 . # = > n o u v e l l e i m a g e c r é é e p o u r l e r é f é r e n t i e l # a f u p / e l a s t i c s e a r c h # E n v o i s u r i n d e x p u b l i c d o c k e r p u s h a f u p / e l a s t i c s e a r c h : 0 . 1 # R é c u p é r a t i o n à p a r t i r d e l ' i n d e x p u b l i c d o c k e r p u l l a f u p / e l a s t i c s e a r c h : 0 . 1 Contruire une image Elasticsearch 0 1 . 0 2 . 0 3 . 0 1 . 0 2 . 0 1 . 0 2 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 18
  15. d o c k e r r u n -

    d - p : 9 2 0 0 \ - - n a m e e l a s t i c s e a r c h - s e r v e r \ - v ` p w d ` / e l a s t i c s e a r c h : / v a r / l i b / e l a s t i c s e a r c h \ a f u p / e l a s t i c s e a r c h : 0 . 1 Démarrer notre container à partir de l'image 0 1 . 0 2 . 0 3 . 0 4 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 19
  16. d o c k e r r u n -

    d - p : 9 2 0 0 \ - - n a m e e l a s t i c s e a r c h - s e r v e r \ - - v o l u m e s - f r o m e l a s t i c s e a r c h - d a t a - v o l u m e \ - v ` p w d ` / e l a s t i c s e a r c h : / v a r / l i b / e l a s t i c s e a r c h \ a f u p / e l a s t i c s e a r c h : 0 . 1 Tagger notre container Elasticsearch 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 20
  17. d o c k e r r u n -

    d - p : 9 2 0 0 \ - - n a m e e l a s t i c s e a r c h - s e r v e r \ - - v o l u m e s - f r o m e l a s t i c s e a r c h - d a t a - v o l u m e \ - v ` p w d ` / e l a s t i c s e a r c h : / v a r / l i b / e l a s t i c s e a r c h \ a f u p / e l a s t i c s e a r c h : 0 . 1 Déclarer un Container Volume de Données 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 21
  18. Avec montage de notre application Symfony2 d o c k

    e r r u n - t - i - p 8 0 : 8 0 \ - - n a m e p h p - n g i n x - s e r v e r \ - - l i n k e l a s t i c s e a r c h - s e r v e r : s y m f o n y _ _ e l a s t i c s e a r c h _ \ - v s y m f o n y 2 : / v a r / w w w / s y m f o n y 2 \ - v ` p w d ` / n g i n x / s i t e s - e n a b l e d : / e t c / n g i n x / s i t e s - e n a b l e d \ # [ . . . ] a f u p / n g i n x : 0 . 1 Lancer un Container Application (nginx) 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 22
  19. d o c k e r r u n -

    t - i - p 8 0 : 8 0 \ - - n a m e p h p - n g i n x - s e r v e r \ - - l i n k e l a s t i c s e a r c h - s e r v e r: s y m f o n y _ _ e l a s t i c s e a r c h _ \ - v s y m f o n y 2 : / v a r / w w w / s y m f o n y 2 \ - v ` p w d ` / n g i n x / s i t e s - e n a b l e d : / e t c / n g i n x / s i t e s - e n a b l e d \ a f u p / n g i n x : 0 . 1 Lier nos containers Elasticsearch et nginx 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 23
  20. # D é f i n i t i o

    n d e p a r a m è t r e s d e c o n f i g u r a t i o n e n y a m l p a r a m e t e r s : e l a s t i c s e a r c h _ h o s t : % e l a s t i c s e a r c h . h o s t % e l a s t i c s e a r c h _ p o r t : % e l a s t i c s e a r c h . p o r t % g m a i l _ s e a r c h _ i n d e x : g m a i l t w i t t e r _ s e a r c h _ i n d e x : t w i t t e r Configuration de notre application 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 24
  21. d o c k e r r u n -

    t - i - p 8 0 : 8 0 \ - - n a m e p h p - n g i n x - s e r v e r \ - - e S Y M F O N Y _ _ E L A S T I C S E A R C H _ _ H O S T = 1 2 7 . 0 . 0 . 1 - v s y m f o n y 2 : / v a r / w w w / s y m f o n y 2 \ - v ` p w d ` / n g i n x / s i t e s - e n a b l e d : / e t c / n g i n x / s i t e s - e n a b l e d \ a f u p / n g i n x : 0 . 1 r o o t @ a d 0 9 c 8 a 6 6 6 7 1 : # d a n s m o n c o n t a i n e r E l a s t i c s e a r c h r o o t @ a d 0 9 c 8 a 6 6 6 7 1 : e n v r o o t @ a d 0 9 c 8 a 6 6 6 7 1 :S Y M F O N Y _ _ E L A S T I C S E A R C H _ _ H O S T = 1 2 7 . 0 . 0 . 1 Variables d'environnement (1/2) Injection d'une variable au démarrage d'un container 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 1 . 0 2 . 0 3 . 25
  22. d o c k e r r u n -

    t - i - p 8 0 : 8 0 \ - - n a m e p h p - n g i n x - s e r v e r \ - - l i n k e l a s t i c s e a r c h - s e r v e r :s y m f o n y _ _ e l a s t i c s e a r c h _ \ - v s y m f o n y 2 : / v a r / w w w / s y m f o n y 2 \ - v ` p w d ` / n g i n x / s i t e s - e n a b l e d : / e t c / n g i n x / s i t e s - e n a b l e d \ a f u p / n g i n x : 0 . 1 SYMFONY__ELASTICSEARCH__HOST <=> %elasticsearch.host% Lier deux containers transfère les variables d'environnement Variables d'environnement (2/2) 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 26
  23. F R O M u b u n t u

    : 1 4 . 0 4 E N V D E B I A N _ F R O N T E N D n o n i n t e r a c t i v e # R U N a p t - g e t u p g r a d e à b a n n i r R U N a p t - g e t u p d a t e R U N a p t - g e t i n s t a l l - y - - f o r c e - y e s s o f t w a r e - p r o p e r t i e s - c o m m o n Pro Tip: Abuser des images officielles 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 27
  24. s u d o a p t - g e

    t i n s t a l l s q u i d - d e b - p r o x y a v a h i - u t i l s h t t p s : / / g i t h u b . c o m / y a s n 7 7 / d o c k e r - s q u i d - r e p o - c a c h e . g i t 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 ? 0 1 . 0 2 . 0 3 . 0 1 . 0 2 . 0 3 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 28
  25. R U N r o u t e - n

    | a w k ' / ^ 0 . 0 . 0 . 0 / { p r i n t $ 2 } ' > / t m p / h o s t _ i p . t x t R U N e c h o " H E A D / " | n c ` c a t / t m p / h o s t _ i p . t x t ` 8 0 0 0 | \ g r e p s q u i d - d e b - p r o x y \ & & ( e c h o " A c q u i r e : : h t t p : : P r o x y \ " h t t p : / / $ ( c a t / t m p / h o s t _ i p . t x t ) : 8 0 0 0 \ " / e t c / a p t / a p t . c o n f . d / 3 0 p r o x y ) \ & & ( e c h o " A c q u i r e : : h t t p : : P r o x y : :p p a . l a u n c h p a d . n e t D I R E C T ; " > > \ / e t c / a p t / a p t . c o n f . d / 3 0 p r o x y ) \ | | e c h o " N o s q u i d - d e b - p r o x y d e t e c t e d o n d o c k e r h o s t " Pro Tip: Proxy Packages Debian (2/2) Dans mon Dockerfile, avant l'installation de paquets : 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . 0 8 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 29
  26. R U N a p t - g e t

    i n s t a l l - y - - f o r c e - y e s n g i n x R U N a p t - g e t i n s t a l l - y - - f o r c e - y e s p h p 5 - f p m Différent de R U N a p t - g e t i n s t a l l - y - - f o r c e - y e s p h p 5 - f p m R U N a p t - g e t i n s t a l l - y - - f o r c e - y e s n g i n x Pro Tip: Tirer parti du cache de Docker Dans vos Dockerfiles : Conserver au maximum l'ordre des instructions! 0 1 . 0 2 . 0 1 . 0 2 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 30
  27. Pro Tip: Proxy Toran pour composer Par 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
  28. # f i g . y m l n g

    i n x: b u i l d : / h o m e / a f u p / p h p - n g i n x l i n k s : - e l a s t i c s e a r c h : s y m f o n y _ _ e l a s t i c s e a r c h _ [ . . . ] p o r t s : - " 8 0 8 1 : 8 0 " e x p o s e : - " 8 0 " Et si on se débarrassait (en partie) du shell ? 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . 0 8 . 0 9 . 1 0 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 32
  29. e l a s t i c s e a

    r c h: i m a g e : a f u p / e l a s t i c s e a r c h : 0 . 1 v o l u m e s _ f r o m : e l a s t i c s e a r c h - d a t a - v o l u m e e x p o s e : - " 9 2 0 0 " p o r t s : - " : 9 2 0 0 " Fig Où se cache notre application Symfony2 cette fois ? 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 33
  30. n g i n x : [ . . .

    ] v o l u m e s : - n g i n x / s i t e s - e n a b l e d : / e t c / n g i n x / s i t e s - e n a b l e d - s y m f o n y 2 : / v a r / w w w / s y m f o n y 2 $ f i g u p Fig 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 34
  31. Aller encore plus loin avec OpenStack Avec OpenStack (cloud manager)

    https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 36
  32. d e s c r i p t i o

    n : > S t a c k H e a t ( O r c h e s t r a t i o n ) r e s o u r c e s : n g i n x : t y p e : D o c k e r I n c : : D o c k e r : : C o n t a i n e r p r o p e r t i e s : i m a g e : a f u p / p h p - n g i n x : 0 . 1 e l a s t i c s e a r c h : t y p e : D o c k e r I n c : : D o c k e r : : C o n t a i n e r [ . . . ] Démarrer une "Stack" avec Heat heat stack-create nginx -f ../openstack/php-nginx.yml 0 1 . 0 2 . 0 3 . 0 4 . 0 5 . 0 6 . 0 7 . 0 8 . 0 9 . 1 0 . https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 37
  33. 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
  34. 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