tag run library images imagenes dockers compose docker dockerfile

run - dockers images



Construye y ejecuta Dockerfile con un comando (5)

PC con Windows

Haga un archivo run.bat . Luego en el archivo agregue esto:

docker build -t foo . docker run -it foo

Para ejecutar el archivo usando powershell o cmd, haga esto:

./run.bat

¿Es posible construir y ejecutar Dockerfile con la ayuda de un solo comando, ya que hay un comando docker build para construir un Dockerfile y docker run -it para ejecutar el comando?

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


docker-build-and-run

He creado un pequeño comando auxiliar para construir y ejecutar, en un solo comando. En Linux o Mac, puede agregar esto a su ~/.bash_profile para que esté disponible en la Terminal.

Uso:

docker-build-and-run BUILD_ARGS [-- RUN_ARGS] [-- RUN_COMMAND]

Ejemplos:

docker-build-and-run . -- npm run test docker-build-and-run --file ./Dockerfile . -- -v ~/volume:/var/volume -- node server.js

La secuencia de comandos:

Agregue esto a un archivo .sh , o agréguelo a su ~/.bash_profile :

TERM_GREEN="/033[1;32m" TERM_BLUE="/033[1;34m" TERM_NC="/033[0m" docker-build-and-run() { if [[ -z "$@" ]]; then echo " Usage: docker-build-and-run BUILD_ARGS [-- RUN_ARGS] [-- RUN_COMMAND] Examples: docker-build-and-run . -- npm run test docker-build-and-run --file ./Dockerfile . -- -v ~/volume:/var/volume -- node server.js " return fi # Extract the segments between the dashes: BEFORE_THE_DASHES= while (( "$#" )); do if [[ "$1" = "--" ]]; then shift break fi BEFORE_THE_DASHES="$BEFORE_THE_DASHES $1" shift done SEGMENT_1=$BEFORE_THE_DASHES BEFORE_THE_DASHES= while (( "$#" )); do if [[ "$1" = "--" ]]; then shift break fi BEFORE_THE_DASHES="$BEFORE_THE_DASHES $1" shift done SEGMENT_2=$BEFORE_THE_DASHES SEGMENT_3=$@ BUILD_ARGS=$SEGMENT_1 RUN_ARGS=$SEGMENT_2 RUN_COMMAND=$SEGMENT_3 if [ -z "$RUN_COMMAND" ]; then RUN_COMMAND=$RUN_ARGS RUN_ARGS= fi TEMP_TAG=docker-build-and-run-temp docker rm -f $TEMP_TAG 2>/dev/null printf "${TERM_GREEN}Building Docker container (${TERM_BLUE}docker build $BUILD_ARGS${TERM_GREEN})${TERM_NC}/n" / && docker build --tag $TEMP_TAG $BUILD_ARGS / && printf "${TERM_GREEN}Running Docker container (${TERM_BLUE}docker run $RUN_ARGS $RUN_COMMAND${TERM_GREEN})${TERM_NC}/n" / && docker run --rm -it $RUN_ARGS --label $TEMP_TAG $TEMP_TAG $RUN_COMMAND }


No, no hay un solo comando. Pero si etiqueta su imagen a medida que la construye, será más fácil de ejecutar:

docker build -t foo . && docker run -it foo


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

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

Y agregue --rm a --rm docker run si desea que el contenedor se elimine automáticamente cuando salga.

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


Si usa Makefile, este fragmento me parece ú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 etiquetado, como en la respuesta @ jonathon-reinhart, pero también obtiene la salida de compilación.