Comment développer une LAMPE application web en utilisant le Panneau, de Marionnettes et de Vagabond?
Dans les âges sombres, mon jeu habituel en place pour le développement de LAMPE d'applications web était de tester en local sur ma machine. PHP (dans mon cas), la base de données et le serveur web étaient tous installés en natif.
Le serveur a été configuré avec le standard de l'installation de Apache et MySQL, et j'ai eu plusieurs hôtes virtuels pour les différentes parties de l'application web. Lorsque j'ai été heureux avec les résultats que j'ai eu sur ma machine locale, je serais connecter au serveur et git pull
dans la mise en scène de l'environnement. En supposant que tout fonctionnait aussi bien sur le serveur que sur ma machine, je ferais la même chose pour la production.
De nouveaux commencements...
Donc je commence une marque nouvelle application web à partir de zéro, et je veux le faire "le bon chemin". J'ai lu sur Docker, l'Errance et de la Marionnette (et Chef, même si personnellement je préfère la Marionnette du système de dépendances plutôt que du Chef, le processus itératif). Malgré toutes les recherches que j'ai faites, il y a toujours semblent être plusieurs questions que je n'arrive pas à trouver de réponses pour:
Devrait-il être séparé des conteneurs Docker pour le serveur web (comme Apache), serveur de base de données (comme MySQL) et chaque partie de l'application web?
Quand je parle de pièces de l'application web, je veux dire des choses comme mysite.com, controlpanel.mysite.com, etc. Ces "pièces" partagent la même base de données.
Depuis le Panneau semble prêt-à-conteneurs pour des choses comme le web et les serveurs de base de données, il semble que ces choses au moins doivent être dans des contenants séparés. Devrait les différentes pièces de mon application web être dans des contenants distincts, trop?
Conteneurs Docker semblent être conçues pour être remplacées plutôt que d'avoir à me mettre à jour le logiciel à l'intérieur. Ce sur les données qu'ils écrire que je ne veux pas perdre?
Le serveur de base de données gère les fichiers liés au contenu de ma base de données (que je vais m'en veux de sauvegarde). Le serveur web va être la création de journaux, et mes applications web de gestion des différents fichiers et les caches, etc. Tous ces fichiers doivent être écrites en dehors de l'application des conteneurs (parce que je pourrais les remplacer lors de la mise à jour?), alors, où vont-ils? Directement dans les machines hôtes du système de fichiers? Ou dans un autre "Docker Volume"? Si elles vont dans le Panneau volumes, dois-je utiliser un volume distinct de la base de données, serveur web, application, etc? Puis-je encore accéder facilement le contenu en utilisant SFTP de ma machine locale comme je le fais maintenant? Je ne veux pas perdre toutes les commodité ici!
Est-ce une bonne idée d'utiliser des Marionnettes pour créer et gérer les conteneurs Docker, à la fois pour le développement du serveur et du serveur de production?
Il semble Marionnette a en charge la gestion de conteneurs Docker directement, si cela semble être une bonne façon de facilement mettre en place un serveur ou l'environnement de production (utilisation de Vagrant) à partir de zéro.
J'espère que je vous ai posé quelques questions pertinentes; il serait grand bien des "meilleures pratiques" pour le développement et la production de LAMPE-comme les applications web, il est juste là ne semble pas être bien que j'ai trouvé!!!
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de bonne réponse à cette question. Si vous utilisez le panneau de la production, puis essayez d'exécuter vos conteneurs docker dans votre environnement de dev, car ils seront en production. D'autre suffit d'utiliser le menu fixe conteneurs de la façon la plus simple que vous le pouvez.
La docker hub fournit des prêts à aller conteneurs pour php, bases de données, etc et il est facile à utiliser. D'autre part, vous avez à lien à eux pour leur permettre d'interagir. Pour un environnement de dev et si vous utilisez plusieurs contenants, je vous conseille d'utiliser docker-composer.
Une autre voie est de construire un menu fixe de l'image qui est la plus proche de votre machine de production (en supposant que vous avez une seule machine) qui serait la base de données, le serveur web et php. Un récipient à partir d'une telle image serait à l'exécution de plusieurs processus. Ceci peut être réalisé de différentes manières. Jetez un oeil à superviseur ou phusion/baseimage.
Vous pourriez les avoir séparés. Si ces applications ont besoin de partager des sessions assurez-vous que les sessions sont stockées dans la base de données ou sur un panneau de volume qui est accessible à tous.
Docker a un truc qui s'appelle le volume de permettre l'enregistrement de données sur un système de fichiers en dehors du récipient. Il y a différentes façons de travailler avec des volumes: vous pouvez monter un répertoire à partir du panneau d'accueil à un volume de conteneurs, ou vous pouvez avoir les données de volume de conteneurs, ou nommé volumes.
Docker volumes est un concept important et il vaut la peine de prendre le temps de les maîtriser.
Si vous voulez accéder facilement aux données utilisées par vos contenants à partir de votre panneau d'accueil, le montage d'un répertoire sur le panneau d'accueil est le chemin à parcourir. Bien qu'il peut être difficile en ce qui concerne les autorisations et la propriété des fichiers
Concernant les sauvegardes, jetez un oeil à la panneau guide de l'utilisateur où tout ce que vous devez savoir en ce qui concerne les volumes sont détaillés.
La meilleure pratique consiste à faire fonctionner sur votre environnement de dev de la même façon, vous utilisez sur votre environnement de production. Il n'y a pas de point d'aller à travers la création de marionnettes correctement pour votre environnement de dev si tout ce travail ne sera pas utilisé dans l'environnement de production. Avoir un Vagrantfile de cette disposition, une machine virtuelle avec docker est vraiment facile avec juste coque de provisionnement ; à mon humble avis puppet/chef/... sont overkill.
Vous poser les bonnes questions, mais il n'y a pas de réponse qui correspondent à toutes les situations. De mon point de vue il y a deux façons de faire les choses:
Tandis que la réponse de @Thomasleveil est déjà très bien et couvre toutes les pièces importantes, j'aimerais ajouter quelques points supplémentaires.
Vagabond, Puppet/Chef et docker-composer
Lorsque vous êtes à l'approvisionnement d'un de la Machine Virtuelle avec Vagrant vous utilisez habituellement Puppet ou Chef d'installer les paquets nécessaires pour votre serveur ... avec quelques scripts shell. PuPHPet est une excellente source pour la configuration d'un de la Machine Virtuelle à base de Pile LAMP et l'apprentissage de la Marionnette et de l'Errance de travailler ensemble dans un peu plus complexe de l'installation. Une alternative est Protobox par la voie.
Lorsque vous utilisez conteneurs Docker avec Vagabond de la même manière comme vous le faites avec des machines virtuelles. Puis avec
vagrant up
vous êtes essentiellement de l'exécution des conteneurs docker avec le Docker fournisseur de. Vagrant va créer les conteneurs pour vous à partir d'un Dockerfile ou utiliser un existant de l'image, plus ou moins commedocker-compose
(fig
) et de les exécuter.L'une des principales raisons de choisir Vagrant pour votre Panneau de configuration est, si vous ou votre équipe est partiellement de travail dans un environnement Windows, depuis Vagrant permet de garder votre configuration cohérente, quel que soit votre système hôte (voir Hôte VM).
Si vous êtes sur mac OS X, vous pouvez utiliser
docker-compose
avec une Boîte Virtuelle VM, si vous êtes sur Linux, vous pouvez utiliser le Panneau de manière native. Il est également toujours possible de se connecter à la boot2docker (ou un autre Docker Hôte VM) viassh
, peu importe si vous êtes sur Windows ou OS X.Remarque: Vous ne devez pas utiliser le protocole SSH dans vos contenants, mais c'est un autre sujet.
À compter de février 2015
docker-compose
se sent un peu plus vif pour moi et aussi gère le démarrage, l'arrêt et la reconstruction des conteneurs de manière plus efficace.Vagrant a l'avantage de spécifier un autre hôte de la machine virtuelle, par exemple. par projet, si vous préférez ce type d'installation.
Remarque: il existe également un menu fixe provisioner qui est plus liée à un processus de construction de Marionnettes.
Lors de l'utilisation de conteneurs Docker vous avez l'impression de courir seul, isolé processus. L'utilisation d'un supervisior devrait être évitée et n'est pas nécessaire pour une LAMPE à pile.
Donc, ma réponse est définitivement: Oui, il devrait y avoir des contenants séparés!
Cela dépend de vos besoins, je vous suggère de lire de la 12factor documentation de l'application, qui décrit les éléments importants à prendre en charge dans une manière très détaillée.
En plus de @Thomasleveil réponse, je vous recommande aussi un backend de stockage pour les téléchargements des utilisateurs comme Amazon S3, SFTP et WebDAV.
Dans mon opinion, votre conteneur d'applications web doit être traité comme un client demande l'accès à votre base de données et de stockage backends (services) et s'appuient pas sur des données à partir de volumes lors de l'exécution dans un environnement de production.
Je ne sais pas à propos de l'orchestration des capacités de la Marionnette, mais pour la construction de conteneurs, si vous êtes en utilisant un Vagabond, je ne vois aucune nécessité de Marionnettes, à cause de la patrie, de Docker provisioner de Vagrant.