Comment organisez-vous les Dockerfiles appartenant à un projet lorsque vous avez un Dockerfile pour la base de données, un pour le serveur d'applications, etc.? Créez-vous une sorte de hiérarchie dans la source? Un grand projet d'entreprise ne peut pas se composer d'un seul Dockerfile?
218
Réponses:
Note de l'auteur
Cette réponse est obsolète. La figure n'existe plus et a été remplacée par Docker compose . Les réponses acceptées ne peuvent pas être supprimées ....
Docker Compose prend en charge la création d'une hiérarchie de projet. Il est donc désormais facile de prendre en charge un Dockerfile dans chaque sous-répertoire.
Réponse originale
Je viens de créer un répertoire contenant un Dockerfile pour chaque composant. Exemple:
Lors de la construction des conteneurs, donnez simplement le nom du répertoire et Docker sélectionnera le fichier Docker correct.
la source
Dans les versions plus récentes (> = 1.8.0) de docker , vous pouvez le faire
Une grosse économie.
EDIT: mise à jour des versions par commentaire de raksja
EDIT: commentaire de @vsevolod: il est possible d'obtenir la coloration syntaxique dans le code VS en donnant des fichiers .Dockerfile extension (au lieu du nom) par exemple Prod.Dockerfile, Test.Dockerfile etc.
la source
Dockerfile.web
une configuration d'exécution. J'ai donc créé un problème: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
fichier, par exemple?Utiliser
docker-compose
et multipleDockerfile
dans des répertoires séparésComme l'a dit Kingsley Uchnor , vous pouvez en avoir plusieurs
Dockerfile
, un par répertoire, qui représentent quelque chose que vous voulez construire.J'aime avoir un
docker
dossier qui contient chaque application et sa configuration. Voici un exemple de hiérarchie de dossiers de projet pour une application Web qui possède une base de données.docker-compose.yml
exemple:docker-compose
exemple d'utilisation de la ligne de commande:Si vous avez besoin de fichiers des dossiers précédents lors de la création de votre Dockerfile
Vous pouvez toujours utiliser la solution ci-dessus et placer votre
Dockerfile
dans un répertoire tel quedocker/web/Dockerfile
, tout ce dont vous avez besoin est de définir la constructioncontext
dans votredocker-compose.yml
comme ceci:De cette façon, vous pourrez avoir des choses comme ça:
et un
./docker/web/Dockerfile
comme ça:Voici quelques commandes rapides de tldr docker-compose . Assurez-vous de vous référer à la documentation officielle pour plus de détails.
la source
COPY ../package.json /app/package.json
)? Ce fichier sera généralement au niveau racine et docker a interdit l'accès au parent. Quelle approche allez-vous suivre?web
projet à partir de.
(dansdocker-compose.yml
:)build: .
. De cette façon,web
a accès aux fichiers racine lors de la construction. J'ai vu cette question connexe: stackoverflow.com/questions/24537340/… et nous pouvons construire à partir du répertoire parent à la place lors de l'utilisation de ladocker
ligne de commande et cette réponse montre comment le faire avec docker-compose: stackoverflow.com/a/45353241/ 1092815-f
l'option est très bien, mais je préfère utiliserdocker-compose
avec des sous-dossiers. Je pense que les deux réponses sont valables. La plupart des gens préfèrent simplement conserver leDockerfile
nom par défaut pour prendre en charge la plupart des IDE prêts à l'emploi. Je n'invalide pas la première réponse, je fournis simplement une alternative. Je n'aime tout simplement pas mon IDE penser que mon Dockerfile est unphp
fichier lorsque j'utiliseDockerfile.php
, mais oui, cela fonctionne. J'ai vu quelques exemples dans la documentation de docker;Dockerfile.build
,Dockerfile.debug
, Etc.example.Dockerfile
conserve la coloration syntaxique et les icônes sur VSCode.Dans Intellij, j'ai simplement changé le nom des fichiers Docker en * .Dockerfile, et associé le type de fichier * .Dockerfile à la syntaxe Docker.
la source
Ajoutez une couche d'abstraction, par exemple, un fichier YAML comme dans ce projet https://github.com/larytet/dockerfile-generator qui ressemble à
Un court script / make Python peut générer tous les Dockerfiles à partir du fichier de configuration.
la source
Lorsque vous travaillez sur un projet qui nécessite l'utilisation de plusieurs Dockerfiles, créez simplement chaque Dockerfile dans un répertoire séparé. Par exemple,
app / db /
Chacun des répertoires ci-dessus contiendra leur dockerfile. Lorsqu'une application est en cours de construction, docker recherche tous les répertoires et crée tous les fichiers docker.
la source