J'ai un pressentiment que docker pourrait grandement améliorer mon webdev flux de travail - mais je n'ai pas vraiment réussi à envelopper ma tête autour de la façon d'aborder un projet, l'ajout de support de la pile.
Le logiciel de base de pile devrait ressembler à ceci:
Logiciel
-
Docker image(s) personnalisé, pile LAMP
- Apache avec plusieurs modules
- MYSQL
- PHP
- Certains CMS, par exemple, Silverstripe
GIT
Flux de travail
Je pourrais imaginer le flux de travail à ressembler à quelque chose comme ce qui suit:
Développement
- Écrire un
Dockerfile
qui définit une LAMPE-conteneur rencontre les exigences énoncées ci-dessus- REQ: L'appareil doit démarrer apache/mysql droite après le démarrage
- Construire l'image docker
- Copier les fichiers requis pour exécuter le CMS par ex.
~/dev/cmsdir
- Mettre
~/dev/cmsdir/
sous contrôle de version
- Mettre
- Exécutez le panneau de conteneur, et en quelque sorte mont -
~/dev/cmsdir
de/var/www/
sur le conteneur - Remplir la base de données
- Faire du travail en
/dev/cmsdir/
- Valider et fermer le panneau conteneur
Déploiement
- Distance de l'hôte (par exemple, avec ansible)
- Pousser conteneur de l'image à l'hôte distant
- Fetch
cmsdir
-projet via git - Exécutez le panneau de conteneurs, tirez dans la base de données et de mont -
cmsdir
en/var/www
Maintenant, cela ressemble tout à fait joli sur le papier, MAIS je ne suis pas certain que ce soit la bonne approche.
Questions:
Tout en développant localement, comment pourrais-je obtenir la base de données de persister après un redémarrage de l'instance de conteneur? Ou aurais-je besoin pour exécuter sql dump chaque fois avant de tourner vers le bas du conteneur?
Dois-je avoir récipient séparé les instances de la base de données et le serveur apache? Ou bien serait-elle suffisante pour avoir un seul conteneur au-dessus de cas d'utilisation?
Si vous utilisez des contenants séparés pour la base de données et le serveur, comment pourrais-je automatiser les tourner en haut et en bas en même temps?
Comment aurais-je réellement mont -
/dev/cmsdir/
dans les contenants/var/www/
-répertoire? Dois-je utiliser les données de volumes pour cette?Ai-je raté un écueils? Tout ce qui pourrait être simplifié?