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.