480 votes

Comment définir le nom de l'image dans Dockerfile ?

Vous pouvez définir le nom de l'image lorsque vous créez une image personnalisée, comme ceci :

docker build -t dude/man:v2 . # Will be named dude/man:v2

Existe-t-il un moyen de définir le nom de l'image dans le Dockerfile, de sorte que je n'aie pas à le mentionner dans le fichier docker build commande ?

10 votes

Pour toute personne curieuse, en utilisant FROM... comme nom ne fonctionne pas

433voto

salehinejad Points 2130

Comment construire une image avec un nom personnalisé sans utiliser le fichier yml :

docker build -t image_name .

Comment exécuter un conteneur avec un nom personnalisé :

docker run -d --name container_name image_name

158 votes

Je ne vais pas commenter davantage mais la question était "Comment définir le nom de l'image dans le Dockerfile ?". Pas "Comment définir le nom de l'image Docker ?". La réponse était dans la question elle-même.

95 votes

J'y suis revenu plusieurs fois, et cette réponse m'a aidé, bien qu'elle soit techniquement hors sujet.

14 votes

Si vous êtes cohérent si vous mettez le Dockerfile dans un répertoire portant le même nom que celui que vous souhaitez pour votre image, vous pouvez utiliser docker build -t $(basename $PWD) . comme commande de construction. Vous pouvez alors utiliser la recherche CTRL-R à partir de "build" pour trouver et réutiliser la commande et ne jamais avoir à la modifier. Vous pouvez également en faire un alias si vous le souhaitez.

425voto

BMitch Points 3744

Le marquage de l'image n'est pas pris en charge dans le Dockerfile. Cela doit être fait dans votre commande de construction. Comme solution de rechange, vous pouvez effectuer la construction avec un fichier docker-compose.yml qui identifie le nom de l'image cible et ensuite exécuter une commande docker-compose build . Un exemple de docker-compose.yml ressemblerait à ceci

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

Cela dit, il est déconseillé de faire la construction avec compose, car cela ne fonctionne pas avec les déploiements en mode essaim. Vous devez donc à nouveau exécuter la commande comme vous l'avez indiqué dans votre question :

docker build -t dude/man:v2 .

Personnellement, j'ai tendance à construire avec un petit shell script dans mon dossier (build.sh) qui passe tous les args et inclut le nom de l'image à cet endroit pour éviter la saisie. Et pour la production, la construction est gérée par un serveur ci/cd qui a le nom de l'image à l'intérieur du pipeline script.

0 votes

Je vote pour car cela répond à la question de la première phrase "Le marquage de l'image n'est pas pris en charge par le fichier Docker". Ce n'est qu'une fois que vous savez cela que vous êtes intéressé à envisager des solutions de contournement...

72voto

David Dehghan Points 1047

Voici une autre version si vous devez référencer un fichier docker spécifique :

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

Ensuite, il suffit de lancer

docker-compose build

7 votes

J'aime bien que cette réponse montre la différence entre le nom_du_conteneur et le nom de l'image:tag. Si seulement il y avait un peu plus d'explications sur ce qui se passe : "nom_du_conteneur" nomme le conteneur qui est finalement créé à partir de l'image. "image" nomme et étiquette l'image créée, à partir de laquelle le conteneur est construit. Comme d'autres l'ont mentionné, il n'est pas possible de spécifier le nom de l'image à partir du Dockerfile, comme le demande le PO, donc nous utilisons le fichier docker-compose.yml à la place, et l'exécutons avec "docker-compose up -d --build".

0voto

Cloud Cho Points 129

Avec un Dockerfile spécifique, vous pouvez essayer :
docker build --tag <Docker Image name> --file <specific Dockerfile> .
par exemple
docker build --tag second --file Dockerfile_Second .

-3voto

Linu Radu Points 115

Ligne de commande pour construire une image avec container custom name .

docker build --name name_of_image .

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