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


299

Vous pouvez définir le nom de l'image lors de la création d'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 Dockerfile, donc je n'ai pas à le mentionner dans la docker buildcommande?


1
Pour ceux qui sont curieux, utiliser FROM ... AS name ne fonctionne PAS
Rufus

Réponses:


267

Le balisage de l'image n'est pas pris en charge dans le Dockerfile. Cela doit être fait dans votre commande build. Pour contourner ce problème, vous pouvez effectuer la génération avec un docker-compose.yml qui identifie le nom de l'image cible, puis exécuter a docker-compose build. Un exemple de docker-compose.yml ressemblerait à

version: '2'

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

Cela dit, il y a une pression contre la création avec la composition, car cela ne fonctionne pas avec les déploiements en mode essaim. Vous êtes donc de retour à l'exécution de la commande comme vous l'avez indiqué dans votre question:

docker build -t dude/man:v2 .

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


303

Comment créer une image avec un nom personnalisé sans utiliser de fichier yml:

docker build -t image_name .

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

docker run -d --name container_name image_name

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

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

7
Si vous êtes cohérent si Dockerfilevous placez le dans un répertoire portant le même nom que celui que vous souhaitez pour votre image, vous pouvez l'utiliser docker build -t $(basename $PWD) .comme commande de génération. Ensuite, vous pouvez utiliser la recherche CTRL-R à partir de "build" pour rechercher et réutiliser la commande et ne jamais avoir à la modifier. Vous pouvez également en faire un alias si vous le souhaitez.
Bruno Bronosky

Merci quand même pour cette réponse. je passais quelques heures pour obtenir cela sur Internet. Je n'ai pas pu obtenir une réponse correcte, celui qui donne un nom à son image ne peut pas aller plus loin sans cela s'il a également besoin d'un nom pour son conteneur.
Susaj S Nair

38

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, vous courez

docker-compose build

1
J'aime que cette réponse montre la différence entre le container_name et le nom de l'image: tag. Si seulement il y avait un peu plus d'explications sur ce qui se passait: "nom_conteneur" nomme le conteneur qui est finalement sorti de l'image. "image" nomme et marque l'image créée, à partir de laquelle le conteneur est construit. Comme d'autres l'ont mentionné, on ne peut pas spécifier le nom de l'image à partir du Dockerfile, comme l'OP l'a demandé, nous utilisons donc le fichier docker-compose.yml à la place, et l'exécutons avec "docker-compose up -d --build"
Sean McCarthy

-7

Vous pouvez le faire en utilisant 'AS' DE ubuntu: 16.04 AS FooImage


6
La ASsyntaxe spécifie le nom cible utilisé dans une génération en plusieurs étapes, et ce nom peut également être utilisé à la place d'une image pour la COPY --fromsyntaxe dans cette génération en plusieurs étapes. Cependant, il ne spécifie pas le nom / balise résultant pour la génération elle-même.
BMitch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.