121 votes

Ce qui serait un workflow de webdev docker bon ?

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

  1. É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
  2. Construire l'image docker
  3. Copier les fichiers requis pour exécuter le CMS par ex. ~/dev/cmsdir
    • Mettre ~/dev/cmsdir/ sous contrôle de version
  4. Exécutez le panneau de conteneur, et en quelque sorte mont - ~/dev/cmsdir de /var/www/ sur le conteneur
  5. Remplir la base de données
  6. Faire du travail en /dev/cmsdir/
  7. Valider et fermer le panneau conteneur

Déploiement

  1. Distance de l'hôte (par exemple, avec ansible)
  2. Pousser conteneur de l'image à l'hôte distant
  3. Fetch cmsdir-projet via git
  4. 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:

  1. 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?

  2. 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?

  3. 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?

  4. 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?

  5. Ai-je raté un écueils? Tout ce qui pourrait être simplifié?

46voto

Jiri Points 4193
  1. Si vous avez besoin de la base de données de la persistance indepent de votre CMS conteneur, vous pouvez utiliser un récipient pour MySQL et un conteneur pour votre CMS. Dans de tels cas, vous pouvez avoir votre MySQL contenant toujours en cours d'exécution et vous pouvez redéployer votre CMS aussi souvent que vous le souhaitez de façon indépendante.

    Pour le développement - l'autre option est de la carte de données mysql répertoires à partir de votre hôte ou votre machine de développement à l'aide de volumes de données. De cette façon, vous pouvez gérer les fichiers de données pour mysql (menu fixe) à l'aide de git (de l'hôte) et "reload" de l'état initial quand vous le voulez (avant le démarrage de mysql contenant).

  2. Oui, je pense que vous devriez avoir un récipient séparé pour la db.

  3. Je suis juste en utilisant la base de script:

    #!/bin/bash
    
    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
    
  4. Oui, vous pouvez utiliser les données des volumes de v commutateur. Je voudrais utiliser ce par le développement. Vous pouvez l'utiliser en lecture seule de montage, de sorte qu'aucune modification ne sera apportée à ce répertoire si vous le souhaitez (votre application doit stocker des données quelque part d'autre de toute façon).

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
    

    De toute façon, pour le déploiement final, je voudrais construire et de l'image à l'aide de dockerfile avec ADD /home/user/dev/cmsdir /var/www/cmsdir

  5. Je ne sais pas :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X