J'ai l'impression que docker pourrait grandement améliorer mon flux de travail webdev - mais je n'ai pas tout à fait réussi à comprendre comment aborder un projet en ajoutant un docker à la pile.
La pile logicielle de base ressemblerait à ceci:
Logiciel
Image (s) Docker fournissant une pile LAMP personnalisée
- Apache avec plusieurs modules
- MYSQL
- PHP
- Certains CMS, par exemple Silverstripe
GIT
Flux de travail
Je pourrais imaginer que le flux de travail ressemble un peu à ce qui suit:
Développement
- Écrivez un
Dockerfile
qui définit un conteneur LAMP répondant aux exigences énoncées ci-dessus- REQ: La machine doit démarrer apache / mysql juste après le démarrage
- Créer l'image docker
- Copiez les fichiers nécessaires pour exécuter le CMS dans par exemple
~/dev/cmsdir
- Mettre
~/dev/cmsdir/
sous contrôle de version
- Mettre
- Exécutez le conteneur docker, et en quelque sorte monter
~/dev/cmsdir
à/var/www/
sur le récipient - Remplir la base de données
- Travaillez dans
/dev/cmsdir/
- Valider et arrêter le conteneur Docker
Déploiement
- Configurer un hôte distant (par exemple avec ansible)
- Transférer l'image du conteneur vers l'hôte distant
- Récupérer
cmsdir
-project via git - Exécutez le conteneur Docker, tirez dans la base de données et montez
cmsdir
dans/var/www
Maintenant, tout cela semble assez beau sur le papier, MAIS je ne suis pas sûr que ce soit la bonne approche.
Des questions:
Lors du développement local, comment puis-je faire en sorte que la base de données persiste entre les redémarrages de l'instance de conteneur? Ou aurais-je besoin d'exécuter sql-dump à chaque fois avant de faire tourner le conteneur?
Dois-je avoir des instances de conteneur distinctes pour la base de données et le serveur Apache? Ou serait-il suffisant d'avoir un seul conteneur pour le cas d'utilisation ci-dessus?
Si vous utilisez des conteneurs séparés pour la base de données et le serveur, comment pourrais-je automatiser leur rotation de haut en bas en même temps?
Comment monterais-je réellement
/dev/cmsdir/
dans le/var/www/
répertoire des conteneurs ? Dois-je utiliser des volumes de données pour cela?Ai-je manqué des pièges? Tout ce qui pourrait être simplifié?
Réponses:
Si vous avez besoin de la persistance de la base de données indépendamment de votre conteneur CMS, vous pouvez utiliser un conteneur pour MySQL et un conteneur pour votre CMS. Dans ce cas, vous pouvez avoir votre conteneur MySQL toujours en cours d'exécution et redéployer votre CMS aussi souvent que vous le souhaitez indépendamment.
Pour le développement - une autre option est de mapper les répertoires de données mysql depuis votre machine hôte / de développement en utilisant des volumes de données. De cette façon, vous pouvez gérer les fichiers de données pour mysql (dans docker) en utilisant git (sur l'hôte) et "recharger" l'état initial à tout moment (avant de démarrer le conteneur mysql).
Oui, je pense que vous devriez avoir un conteneur séparé pour db.
J'utilise juste un script de base:
Oui, vous pouvez utiliser le commutateur data-volumes -v. J'utiliserais ceci pour le développement. Vous pouvez utiliser le montage en lecture seule, donc aucune modification ne sera apportée à ce répertoire si vous le souhaitez (votre application devrait de toute façon stocker les données ailleurs).
Quoi qu'il en soit, pour le déploiement final, je construirais et créerais une image à l'aide de dockerfile avec
ADD /home/user/dev/cmsdir /var/www/cmsdir
Je ne sais pas :-)
la source
Vous souhaitez utiliser docker-compose. Suivez le tutoriel ici. Très simple. Semble cocher toutes vos cases.
https://docs.docker.com/compose/
la source
Je comprends que cet article date de plus d'un an en ce moment, mais je me suis récemment posé des questions très similaires et j'ai plusieurs bonnes réponses à vos questions.
Vous pouvez configurer une instance de docker MySQL et faire en sorte que les données persistent sur un conteneur de données sans état, c'est-à-dire que le conteneur de données n'a pas besoin d'être actif
Oui, je recommanderais d'avoir une instance distincte pour votre serveur Web et votre base de données. C'est la puissance de Docker.
Découvrez ce repo que j'ai construit. Fondamentalement, c'est aussi simple que
make build
&make run
et vous pouvez avoir un serveur Web et un conteneur de base de données fonctionnant localement.Vous utilisez l'
-v
argument lors de la première exécution du conteneur, cela liera un dossier spécifique sur le conteneur à l'hôte exécutant le conteneur.Je pense que vos idées sont excellentes et qu'il est actuellement possible de réaliser tout ce que vous demandez.
Voici une solution clé en main répondant à tous les besoins que vous avez listés.
la source
J'ai mis en place une configuration de composition de docker facile à utiliser qui doit correspondre aux exigences de votre flux de travail de développement.
https://github.com/ehyland/docker-silverstripe-dev
Caractéristiques principales
HHVM
+NGINX
ouApache2
+PHP5
Le fichier README.md doit être suffisamment clair pour vous permettre de démarrer.
la source