Puppet et docker peuvent faire plusieurs des mêmes choses, mais ils les abordent différemment.
Puppet gère les fichiers + packages + services. (Appelé le trifecta). Docker encapsule les fichiers binaires et les fichiers de configuration à l'intérieur d'un conteneur.
Au moment d'écrire ces lignes, le docker est toujours instable et ne devrait pas être utilisé en production. De nombreuses API sont susceptibles d'être modifiées jusqu'à la sortie de la version 1.0.
Même lorsque Docker devient stable, il sera très difficile de convertir chaque processus et fichier de configuration en conteneurs Docker.
La marionnette par contre est un produit stable et est livré avec tout un écosystème d'outils (heira, mcollective, facter, razor). Ces outils peuvent être mis en œuvre rapidement et sans souci de rupture.
Je suggère fortement les ressources suivantes.
Une vidéo expliquant comment gérer les piles d'applications avec une marionnette
https://www.youtube.com/watch?v=KSo_mcJxFIA
Un podcast sur la façon dont docker et marionnette peuvent travailler ensemble
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html
Un article de blog de marionnettes sur la façon de s'intégrer à Docker
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker
Un autre article de blog sur les marionnettes et les dockers coexistant
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist
Un module marionnette pour interagir avec docker
http://docs.docker.io/use/puppet/
Une correction mineure sur la terminologie des devops. Devops est plus une méthodologie de développement logiciel où les développeurs et les opérations coopèrent que n'importe quel outil spécifique.
Mise à jour
Actuellement, mon entreprise utilise à la fois des marionnettes et des dockers. Voici une excellente présentation donnée lors de la conférence de marionnettes 2014 sur les raisons pour lesquelles vous utiliseriez puppet vs docker. Donné par James Turnbull, un ancien employeur de puppetlabs et l'auteur du livre docker.
https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter
Aussi un bon court tutoriel vidéo sur docker donné par sysadmincasts.com
https://sysadmincasts.com/episodes/31-introduction-to-docker
Docker Pros:
- Peut tourner rapidement l'instance
- Plus facile à apprendre que la marionnette
- Facile à faire 0 temps d'arrêt
Docker Inconvénients:
- Les conteneurs ont une limite de 10 Go lors de l'utilisation du backend devicemapper
- Les petites modifications de configuration prennent beaucoup de temps pour reconstruire le conteneur
- Coûte de l'argent pour utiliser un registre docker comme hub.docker.com, quay.io (Le registre docker auto-hébergé est extrêmement bogué et n'a pas de GUI)
- Aucun système d'initialisation approprié. Certaines applications ne fonctionnent pas bien.
- Pas de contrôle fin sur le réseau
- Les applications qui nécessitent des sous-coques (en regardant votre RVM + rubis) sont très difficiles à faire fonctionner correctement
- Impossible de gérer les hôtes Windows, pas de SLES ou d'autres systèmes d'exploitation moins populaires
- Actuellement, l'orchestration des dockers est très jeune.
- Impossible actuellement de définir votre /etc/resolv.conf au moment de la construction
- Divers bogues que nous devons monter / etc / localtime et / dev / urandom pour mapper aux répertoires localtime et urandom de l'hôte.
- Les performances ne sont pas aussi rapides (malgré toutes les affirmations selon lesquelles le docker devrait être 99% plus rapide que le métal nu, il est parfois 30% plus lent que les autres machines).
- Les petits conteneurs ont encore des centaines de mégaoctets de surcharge. Nos conteneurs sont tous de plusieurs gigaoctets.
Puppet Pros:
- Facile à évoluer
- Fonctionne avec les serveurs existants (windows, linux, sles)
- Rapide pour faire de petits changements
- Forte communauté d'autres utilisateurs et modules de marionnettes
- API standardisée pour l'installation de packages sur toutes les plateformes
Inconvénients des marionnettes:
- Les grandes infrastructures deviennent très complexes
- Les dépendances de module conditionnelles créent du code spagetti
- Poids plus lourd
Actuellement, nous utilisons des marionnettes pour approvisionner nos conteneurs de docker. Les conteneurs Docker sont utilisés pour les builds jenkins et sont détruits après chaque build. Cela fonctionne bien et nous donne un environnement cohérent. Cela signifie que nous ne devons écrire le code qu'une seule fois, puis reconstruire les machines ubuntu, sles et centos. La reconstruction des conteneurs prend environ 15 à 30 minutes et est toujours un processus manuel. Docker est idéal pour faire tourner des vm de test rapide,
Bref, la marionnette est excellente pour gérer votre infrastructure existante. Docker est bon si vous avez un greenfield 100% linux avec une pile technologique qui peut être enfermée dans de petites instances éphémères. Bien que certaines fonctionnalités se chevauchent, elles ne s'excluent pas mutuellement.