L'ajout de fichiers à la norme des images à l'aide de docker-composer
Je ne suis pas sûr si une chose m'échappe ou si c'est juste pas possible, mais je suis en train de composer toute une pile d'application avec des images de docker hub.
L'un d'eux est mysql et il prend en charge l'ajout de fichiers de configuration grâce à des volumes et à exécuter .sql-les fichiers d'un répertoire monté.
Mais, j'ai ces fichiers sur la machine sur laquelle je suis en cours d'exécution docker-composer, pas sur l'ordinateur hôte. Il n'y a pas moyen de spécifier les fichiers à partir de la machine locale à copier dans le conteneur avant de l'exécuter point d'entrée/cmd? Dois-je vraiment créer des images de tout juste pour ce cas?
Oui,
docker cp
fonctionne, mais pas comme une partie de docker-composer, c'est une étape distincte. Il serait plus agréable de ne pas envelopper le panneau-composer dans un script shell, juste pour atteindre cet objectif.Malheureusement docker compose est limitée. En tant que votre utilisation devient de plus en plus précis, vous ne serez pas en mesure d'échapper à l'aide de scripts shell pour certaines choses. Composer ne fonctionne pas même avec le nouvel essaim mode.
Ce que j'ai l'habitude de faire pour résoudre ce problème est de créer des images Docker pour la configuration. J'ai ces fichiers dans un CV avec un Dockerfile, et je de construire un versionnées le Panneau de l'image (à partir de Zéro). Plus tard, j'ai lancer le composer avec d'un volumes à partir de indicathing cette "fichiers contenant".
OriginalL'auteur Andreas Wederbrand | 2016-09-08
Vous devez vous connecter pour publier un commentaire.
Option A: Inclure les fichiers à l'intérieur de votre image. C'est pas l'idéal puisque vous êtes en train de mixer des fichiers de configuration avec votre image (qui ne devrait plus contenir vos fichiers binaires, pas de la config), mais satisfait à l'exigence d'utiliser uniquement docker-composer pour envoyer les fichiers.
Cette option est atteint par l'utilisation de docker-composer pour construire votre image, et qui s'appuient envoie tous les fichiers à partir du répertoire de construction de la télécommande menu fixe du moteur. Votre
docker-compose.yml
ressemblerait à:Et db/Dockerfile ressemblerait à:
Le point d'entrée/cmd resterait inchangé. Vous devez exécuter
docker-compose up --build
si l'image existe déjà et vous avez besoin de modifier les fichiers sql.Option B: Utiliser un volume pour stocker vos données. Cela ne peut être fait directement à l'intérieur de docker-composer. Cependant, il est la meilleure façon d'inclure des fichiers à partir de l'extérieur de l'image dans le conteneur. Vous pouvez remplir le volume à travers le réseau en utilisant le panneau de la CLI et de la redirection d'entrée avec la commande tar pour emballer et déballer les fichiers envoyés sur stdin:
Exécuter via un script et ensuite avoir le même script de rebond de la db conteneur de reload config.
Option C: Utiliser un certain type de système de fichiers en réseau (nas. Si vous pouvez configurer NFS sur l'hôte sur lequel vous exécutez votre menu fixe de la CLI, vous pouvez vous connecter à ces partages NFS à partir de la télécommande menu fixe nœud en utilisant l'une des options ci-dessous:
Option D: Avec l'essaim de mode, vous pouvez inclure des fichiers comme des configs dans votre image. Cela permet fichiers de configuration, qui aurait normalement besoin d'être poussé à n'importe quel nœud dans l'essaim, pour être envoyé sur demande au nœud où le service est exécuté. Il utilise un
docker-compose.yml
fichier à définir, mais essaim mode n'est pas à l'aide de docker-composer lui-même, de sorte que cela peut ne pas s'adapter à vos besoins spécifiques. Vous pouvez exécuter un seul nœud de l'essaim en mode cluster, de sorte que cette option est disponible même si vous n'avez qu'un seul nœud. Cette option exige que chacun de vos fichiers sql sont ajoutés en tant que distincte de config. Ledocker-compose.yml
ressemblerait à:Alors, au lieu d'un
docker-compose up
, vous feriez exécuter undocker stack deploy -c docker-compose.yml my-db-stack
.OriginalL'auteur BMitch
C'est la façon dont je le fais avec des volumes:
OriginalL'auteur Adam Spence
Comme une mise à jour plus récente à cette question: avec un menu fixe essaim hébergé sur Amazon, par exemple, vous pouvez définir un volume qui peut être partagée par les services et est disponible sur tous les nœuds de l'essaim (à l'aide de la cloudstor pilote, qui à son tour a AWS EFS sous-jacents à la persistance).
OriginalL'auteur Eoan
je pense que vous avez eu à faire dans un fichier composer:
OriginalL'auteur Cristian Monti