Cree y ejecute Dockerfile con un solo comando

Resuelto Twinkle asked hace 7 años • 10 respuestas

¿Es posible crear una imagen desde Dockerfile y ejecutarla con un solo comando?
Hay un comando docker buildpara crear un Dockerfile y docker run -itejecutar la imagen.

¿Existe alguna combinación de estos dos comandos para que sea más fácil de construir y ejecutar con un solo comando?

Twinkle avatar Jul 17 '17 17:07 Twinkle
Aceptado

Si desea evitar el etiquetado, docker build -qno genera nada más que el hash de la imagen final , que puede usar como argumento para docker run:

docker run -it $(docker build -q .)

Y agregue --rmsi docker rundesea que el contenedor se elimine automáticamente cuando salga.

docker run --rm -it $(docker build -q .)
starthal avatar Jul 12 '2018 20:07 starthal

No, no existe un comando único. Pero si etiqueta su imagen mientras la crea, será más fácil de ejecutar:

docker build -t foo . && docker run -it foo
Jonathon Reinhart avatar Jul 17 '2017 10:07 Jonathon Reinhart

Utilizo docker-compose para esta comodidad, ya que la mayoría de las aplicaciones que estoy creando se comunican con servicios externos tarde o temprano, así que si voy a usarlo de todos modos, ¿por qué no usarlo desde el principio? Solo tienes docker-compose.yml como:

version: "3"
services:
  app:
    build: .

y luego simplemente ejecuta la aplicación con:

docker-compose up --build app

Reconstruirá la imagen o reutilizará el contenedor dependiendo de si se realizaron cambios en la definición de la imagen.

Dejan Simic avatar Jan 04 '2020 02:01 Dejan Simic

Recientemente comencé a recibir un mensaje promocionaldocker scan sobre el uso después de cada compilación.

Utilice 'docker scan' para ejecutar pruebas de Snyk en imágenes para encontrar vulnerabilidades y aprender cómo solucionarlas

Esto es lo que solía hacer:

docker build --quiet .

y esto es lo que está funcionando ahora:

docker build --quiet . | head -n1
bozdoz avatar Apr 16 '2021 19:04 bozdoz

Si usa Makefile, este fragmento me resulta útil:

build:
    @docker build . | tee .buildlog

bash: build
    @docker run --rm -it $(shell grep "Successfully built" .buildlog | cut -d ' ' -f 3) /bin/bash

No necesita etiquetas, como en la respuesta de @ jonathon-reinhart, pero también obtiene el resultado de la compilación.

tavlima avatar Sep 19 '2018 12:09 tavlima