Comment nommer Dockerfiles

140

Je ne sais pas comment nommer Dockerfiles. Beaucoup sur GitHub utilisent Dockerfilesans extension de fichier. Dois-je leur donner un nom et une extension; si oui quoi? Ou est-ce que je les appelle simplement Dockerfile?

Lloyd R. Prentice
la source

Réponses:

165

Ne changez pas le nom du dockerfile si vous souhaitez utiliser le générateur automatique sur hub.docker.com. N'utilisez pas d'extension pour les fichiers docker, laissez-la null. Le nom du fichier doit être: (aucune extension du tout)

Dockerfile

cependant, vous pouvez faire comme ci-dessous aussi ...

dev.Dockerfile, uat.Dockerfile, prod.DockerfileEtc.

Sur VS Code, vous pouvez utiliser <purpose>.Dockerfileet cela fonctionne en conséquence.

tk_
la source
83
Qu'en est-il lorsque vous avez plusieurs fichiers Docker dans le même répertoire?
Visgean Skeloru
@VisgeanSkeloru, bien qu'un peu compliqué, vous pouvez les mettre dans différents répertoires si nécessaire, peu importe où j'ai regardé, il semble que la convention soit déjà établie
orustammanapov
2
@VisgeanSkeloru Ne pas avoir plusieurs fichiers Docker dans le même répertoire. Le répertoire contenant devient le contexte de la docker buildcommande, ce qui signifie que chaque image sera inutilement reconstruite si le fichier docker d'une autre image est modifié.
Thomas
6
@Thomas vous devez parfois placer plusieurs fichiers Dockerfiles dans le même répertoire afin de partager des fichiers communs entre des conteneurs séparés, car le contexte docker ne permet pas d'accéder à "../some-common-stuff"
Devis L.
Le "D" doit-il être capitalisé ou cela n'a pas d'importance?
NoName
51

dev.Dockerfile, test.Dockerfile, build.DockerfileEtc.

Sur VS Code, j'utilise <purpose>.Dockerfileet il est reconnu correctement.

Sahil Ahuja
la source
27

Je pense que vous devriez avoir un répertoire par conteneur avec un Dockerfile (sans extension). Par exemple:

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile

Lorsque vous construisez, utilisez simplement le nom du répertoire, Docker trouvera le Dockerfile. par exemple:

docker build -f ./db .
Garryp
la source
Construira-t-il 3 conteneurs à partir de votre exemple?
alvas
@alvas Yes it will
garryp
4
Ce n'est pas assez bon pour de nombreux cas. Docker ne peut pas voir les fichiers. Par exemple, cible, build, etc.
Cyva
Pouvons-nous exécuter ce fichier docker 3 en même temps en utilisant la commande docker-compose alors?
Yogi Ghorecha le
16

Si vous souhaitez utiliser le générateur automatique sur hub.docker.com, il doit l'être Dockerfile . Donc là :)

Dirk Eddelbuettel
la source
3
Je pense que le contexte de la question était plus large. Vous pourriez peut-être inclure des informations supplémentaires pour les personnes n'utilisant pas le générateur automatique pour rendre cette réponse plus complète.
Josh Habdas
16

Il semble que ce soit vrai, mais personnellement, il me semble que ce n'est pas une bonne conception. Bien sûr, ayez un nom par défaut (avec l'extension) mais autorisez d'autres noms et ayez un moyen de spécifier le nom du fichier docker pour les commandes.

Avoir une extension est également agréable car cela permet d'associer des applications à ce type d'extension. Lorsque je clique sur un Dockerfile sous MacOSX, il le traite comme un exécutable Unix et essaie de l'exécuter.

Si les fichiers Docker avaient une extension, je pourrais dire au système d'exploitation de les démarrer avec une application particulière, par exemple mon application d'édition de texte. Je ne suis pas sûr, mais le comportement actuel peut également être lié aux autorisations de fichier.

Ashley Aitken
la source
15

J'ai créé deux Dockerfiles dans le même répertoire,

# vi one.Dockerfile
# vi two.Dockerfile

pour construire les deux Dockerfiles utilisez,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile

Remarque: vous devriez être dans le répertoire de travail actuel.

Shivaraj Navalgund
la source
10

Dois-je leur donner un nom et une extension; si oui quoi?

Vous pouvez nommer vos Dockerfiles comme vous le souhaitez. Le nom de fichier par défaut est Dockerfile(sans extension), et l'utilisation de la valeur par défaut peut faciliter diverses tâches lors de l'utilisation de conteneurs.

En fonction de vos besoins spécifiques, vous souhaiterez peut-être changer le nom du fichier. Si vous construisez pour plusieurs architectures, par exemple, vous souhaiterez peut-être ajouter une extension indiquant l'architecture comme l' équipe resin.io l' a fait pour le conteneur HAProxy, son exemple ARM multi-conteneur :

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi

Dans l'exemple fourni, chaque Dockerfile est construit à partir d'une image en amont différente, spécifique à l'architecture. Le Dockerfile spécifique à utiliser pour la génération peut être spécifié à l'aide de l' --file, -foption lors de la création de votre conteneur à l'aide de la ligne de commande.

Josh Habdas
la source
1
J'aime utiliser une extension pour indiquer l'architecture (ou autre). Contrairement à d'autres réponses, tous les Dockerfiles sont extrêmement simples à trouver dans un grand répertoire encombré; ils trient naturellement ensemble.
Mike Sherrill 'Cat Recall' le
3

Dockerfileest bon si vous n'avez qu'un seul fichier docker (par répertoire). Vous pouvez utiliser la norme de votre choix si vous avez besoin de plusieurs fichiers docker dans le même répertoire - si vous avez une bonne raison. Dans un projet récent, il y avait des fichiers docker AWS et des fichiers d'environnement de développement local car les environnements différaient suffisamment:

Dockerfile Dockerfile.aws

Ktamlyn
la source
J'ai également vu cette méthode utilisée pour spécifier les architectures. Par exemple, placer un à Dockerfile.armv7hfcôté de a Dockerfile.i386.
Josh Habdas
1

Dockerfile (nom et dossier personnalisés):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Construire:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Abel
la source