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é?