Question

Voici ma situation :

  • J'ai un projet écrit en Go stocké sur Github
  • J'ai 3 serveurs d'applications derrière un équilibreur de charge (app1, app2, app3)
  • J'ai un Dockerfile dans le cadre du projet dans git, qui, lorsqu'il est utilisé pour créer une image, sait comment installer toutes les dépendances de mon application (y compris Go) et obtenir un environnement de travail pour mon application
  • J'ai des conteneurs exécutés sur les 3 serveurs d'applications et tout fonctionne à merveille

Maintenant, je souhaite modifier du code et redéployer mes modifications sur ces 3 serveurs.Je peux penser à 3 façons possibles de faciliter l’automatisation de cela :

  1. Dans le cadre de mon fichier docker, je peux ajouter une étape qui extrait mon code de Github et le construit.Donc, pour redéployer, j'ai besoin d'un script qui se connecte aux 3 serveurs, reconstruit et exécute les conteneurs, extrayant ainsi tout le nouveau code dans le processus.Tout ce dont j'ai besoin pour pousser vers un serveur, c'est le Dockerfile.
  2. Dans le cadre de mon Dockerfile, je peux avoir une commande ADD pour regrouper mon code dans le conteneur.Je devrais alors déployer l'intégralité de mon projet sur chaque serveur en utilisant quelque chose comme Capistrano ou Fabric, puis tuer l'ancien conteneur, le reconstruire et l'exécuter.
  3. Je peux utiliser une machine désignée (ou mon environnement de développement) pour créer une nouvelle image basée sur le code source actuel.Ensuite, transférez cette image dans le registre.Ensuite, ayez un script qui se connecte à mes serveurs et extrait la nouvelle image, tue l'ancien conteneur et exécute le nouveau.

Le numéro 1 semble être le plus simple, mais la plupart des autres discussions que j'ai lues sur Dockers penchent vers une situation comme 3 qui me semble plutôt longue.

Quelle est la meilleure option ici (ou pas ici), je suis nouveau sur Docker, ai-je donc raté quelque chose ?J'ai demandé à quelqu'un qui connaît Docker et sa réponse a été « vous ne pensez pas à la manière de Docker », alors quelle est la méthode Docker ?

Était-ce utile?

La solution

Je pense que l'idée de l'option 3 est que vous construisez l'image une seule fois, ce qui signifie que tous les serveurs exécuteraient la même image.Les deux autres peuvent produire différentes images.

E.g.Dans un scénario légèrement plus impliqué, les trois constructions peuvent même choisir différents engagements si vous allez avec l'option 1.

Autres conseils

La combinaison des options 2 et 3 peut être utilisée avec le Fabrice.C'est une extension de Tissu, ainsi fabfile.py car votre projet peut ressembler à ceci :

from fabricio import docker, tasks

app = tasks.ImageBuildDockerTasks(
    service=docker.Container(
        name='app',
        image='registry/project/image:tag',
        options={'publish': '8000:8000'},
    ),
    hosts=['user@host1', 'user@host2', 'user@host3'],
)

En utilisant la définition de configuration ci-dessus, vous pouvez ensuite taper fab --list à partir du répertoire racine du projet et consultez une liste des commandes Fabricio disponibles :

Available commands:

    app           prepare -> push -> backup -> pull -> migrate -> update
    app.deploy    prepare -> push -> backup -> pull -> migrate -> update
    app.prepare   prepare Docker image
    app.pull      pull Docker image from registry
    app.push      push Docker image to registry
    app.rollback  rollback Docker service to a previous version
    app.update    update service to a new version

Il y a aussi un tas de exemples d'utilisation de Fabricio, y compris Mode essaim Docker ce qui peut être très utile pour votre configuration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top