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
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
au sens gestion de configuration) Container Volume de Données (point de montage) https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 9
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
/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
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
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
$ 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
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
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
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
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
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
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
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
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
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
: 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
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
| 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
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
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
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
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
] 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
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
Configuration visuelle avec Gaudi Déploiement avec Deis / CoreOS Support de Docker avec AppEngine https://joind.in/11240 (@thierrymarianne | thierrym@theodo[point]fr) 38