是否有可能从Dockerfile构建镜像,并使用一个命令运行它? docker build命令用于构建Dockerfile, docker run -it命令用于运行映像。
是否存在这两个命令的组合,以使仅使用一个命令就可以更容易地构建和运行?
是否有可能从Dockerfile构建镜像,并使用一个命令运行它? docker build命令用于构建Dockerfile, docker run -it命令用于运行映像。
是否存在这两个命令的组合,以使仅使用一个命令就可以更容易地构建和运行?
当前回答
为了方便起见,我使用docker-compose,因为我正在构建的大多数应用程序迟早都会与外部服务通信,所以如果我无论如何都要使用它,为什么不从一开始就使用它呢?只需要docker-compose。yml:
version: "3"
services:
app:
build: .
然后运行应用程序:
docker-compose up --build app
它将重建图像或重用容器,这取决于是否对图像定义进行了更改。
其他回答
对于任何寻找可重用解决方案的人来说,你可以安装我创建的这个docker插件: https://github.com/stasmihailov/docker-script
然后你可以构建并运行Dockerfile,如下所示:
docker script ./Dockerfile
为了方便起见,我使用docker-compose,因为我正在构建的大多数应用程序迟早都会与外部服务通信,所以如果我无论如何都要使用它,为什么不从一开始就使用它呢?只需要docker-compose。yml:
version: "3"
services:
app:
build: .
然后运行应用程序:
docker-compose up --build app
它将重建图像或重用容器,这取决于是否对图像定义进行了更改。
你也可以做docker构建和管道图像名称,它输出到docker运行:
docker build . | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run {}
Docker将为您提供多行文本…成功搭建18e77bc0d83a 最后一行的尾部是-n1 用' '分割,用cut -d' ' -f3得到第三个单词 将它作为参数传递给xargs运行-I{} docker run {}
docker-build-and-run
我在一个命令中创建了一个用于构建和运行的小助手命令。在Linux或Mac上,您可以将此添加到~/。bash_profile使其在终端中可用。
用法:
docker-build-and-run BUILD_ARGS [-- RUN_ARGS] [-- RUN_COMMAND]
例子:
docker-build-and-run . -- npm run test
docker-build-and-run --file ./Dockerfile . -- -v ~/volume:/var/volume -- node server.js
脚本:
将其添加到.sh文件中,或添加到~/.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
}
Windows电脑
生成run.bat文件。然后在文件中添加这个:
docker build -t foo .
docker run -it foo
要使用powershell或cmd运行文件,请执行以下操作:
./run.bat