¿Cómo configurar el nombre de la imagen en Dockerfile?

299

Puede establecer el nombre de la imagen al crear una imagen personalizada, como esta:

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

¿Hay alguna manera de definir el nombre de la imagen en Dockerfile, por lo que no tengo que mencionarlo en el docker buildcomando?

gvlasov
fuente
1
Para cualquier persona curiosa, usando DE ... COMO nombre no funciona
Rufus

Respuestas:

267

El etiquetado de la imagen no es compatible dentro del Dockerfile. Esto debe hacerse en su comando de compilación. Como solución alternativa, puede hacer la compilación con un docker-compose.yml que identifica el nombre de la imagen de destino y luego ejecuta un docker-compose build. Un ejemplo de docker-compose.yml se vería así

version: '2'

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

Dicho esto, hay un impulso en contra de hacer la compilación con componer ya que eso no funciona con las implementaciones de modo enjambre. Entonces ha vuelto a ejecutar el comando como lo ha indicado en su pregunta:

docker build -t dude/man:v2 .

Personalmente, tiendo a construir con un pequeño script de shell en mi carpeta (build.sh) que pasa cualquier argumento e incluye el nombre de la imagen allí para guardar la escritura. Y para la producción, la construcción es manejada por un servidor ci / cd que tiene el nombre de la imagen dentro del script de la tubería.

BMitch
fuente
303

Cómo construir una imagen con nombre personalizado sin usar el archivo yml:

docker build -t image_name .

Cómo ejecutar un contenedor con nombre personalizado:

docker run -d --name container_name image_name
Salehinejad
fuente
78
No voy a comentar más, pero la pregunta era "¿Cómo configurar el nombre de la imagen en Dockerfile?" No "¿Cómo configurar el nombre de la imagen acoplable?" Esa respuesta estaba en la pregunta misma.
Novaterata
68
He vuelto a este un par de veces, y esta respuesta ha ayudado, a pesar de ser técnicamente fuera de tema
gdbj
77
Si es coherente si coloca el Dockerfiledirectorio en un directorio con el mismo nombre que desea para su imagen, puede usarlo docker build -t $(basename $PWD) .como comando de compilación. Luego puede usar la búsqueda CTRL-R desde "build" para encontrar y reutilizar el comando y nunca tener que editarlo. También puede convertirlo en un alias si lo desea.
Bruno Bronosky el
Gracias de todos modos por esta respuesta. Pasé unas horas para obtener esto por internet. No pude obtener una respuesta adecuada, alguien que le da nombre a su imagen no puede ir más allá sin esto si necesita también el nombre de su contenedor.
Susaj S Nair
38

Aquí hay otra versión si tiene que hacer referencia a un archivo acoplable específico:

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

Entonces solo corres

docker-compose build
David Dehghan
fuente
1
Me gusta que esta respuesta muestre la diferencia entre el container_name y el nombre de la imagen: etiqueta. Si solo hubiera un poco más de explicación de lo que está sucediendo: "nombre_contenedor" nombra el contenedor que finalmente surgió de la imagen. "imagen" nombra y etiqueta la imagen creada, a partir de la cual se construye el contenedor. Como otros han mencionado, uno no puede especificar el nombre de la imagen del Dockerfile, como lo solicitó el OP, por lo que usamos el archivo docker-compose.yml y lo ejecutamos con "docker-compose up -d --build"
Sean McCarthy
-7

Puede hacer esto usando 'AS' DESDE ubuntu: 16.04 AS FooImage

Ricardo
fuente
66
La ASsintaxis especifica el nombre de destino utilizado en una compilación de varias etapas, y este nombre también se puede usar en lugar de una imagen para la COPY --fromsintaxis dentro de esa compilación de varias etapas. Sin embargo, no especifica el nombre / etiqueta resultante para la compilación misma.
BMitch