是否可以使用一个命令从Dockerfile构建镜像并运行它?
有一个docker build
命令用于构建Dockerfile,docker run -it
命令用于运行镜像。
是否有任何这两个命令的组合方式可以更轻松地使用一个命令来构建和运行?
是否可以使用一个命令从Dockerfile构建镜像并运行它?
有一个docker build
命令用于构建Dockerfile,docker run -it
命令用于运行镜像。
是否有任何这两个命令的组合方式可以更轻松地使用一个命令来构建和运行?
如果您想避免打标签,docker build -q
将仅输出最终映像哈希,您可以将其用作docker run
的参数:
docker run -it $(docker build -q .)
如果你希望容器在退出时自动删除,请在docker run
命令中添加--rm
参数。
docker run --rm -it $(docker build -q .)
docker build
的常规构建输出 :/ - Liondocker run ... $(docker build -q .) python foo.py
。问题是,如果 "docker build ..." 部分意外出现错误,那么 "docker run ..." 部分实际上会忽略构建错误,并继续并将下一个单词(在这种情况下是 "python")当作镜像名称来处理。换句话说,现在它试图用名为 "python" 的镜像运行 foo.py
,这不是你想要的。 - RayLuodocker build -t foo . && docker run -it foo
docker rmi foo
。 - Sarkis Varozian出于方便考虑,我使用docker-compose来构建大多数应用程序,因为它们中的大多数在早期或晚期都需要与外部服务进行通信,所以如果我还要使用它,为什么不从一开始就使用呢?只需将docker-compose.yml放在以下位置:
version: "3"
services:
app:
build: .
然后只需使用以下命令运行应用程序:
docker-compose up --build app
它将重新构建镜像,或根据镜像定义是否有更改来重用容器。
它将重新构建镜像,或根据镜像定义是否有更改来重用容器。
最近我的每次构建完成后都会收到一条关于使用docker scan
的推广信息。
使用“docker scan”运行Snyk测试以查找漏洞并学习如何修复它们
这是我以前的做法:
docker build --quiet .
以下是目前正在运作的内容:
docker build --quiet . | head -n1
export DOCKER_SCAN_SUGGEST=false
- Tobiasbuild:
@docker build . | tee .buildlog
bash: build
@docker run --rm -it $(shell grep "Successfully built" .buildlog | cut -d ' ' -f 3) /bin/bash
您不需要像@jonathon-reinhart的回答中一样进行标记,但您也可以获得构建输出。
您还可以执行docker build
并将其输出的镜像名称传递给docker run
:
docker build . | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run {}
docker build
会输出多行文本,其中包含 ... Successfully built 18e77bc0d83a
tail -n1
获取最后一行cut -d' ' -f3
将其按照空格分割,并获取第三个单词run
,并使用 xargs -I{} docker run {}
如果您正在寻找可重复使用的解决方案,您可以安装我创建的此Docker插件: https://github.com/stasmihailov/docker-script
然后,您可以按照以下方式构建和运行Dockerfile:
docker script ./Dockerfile
构建并运行docker
我创建了一个小工具命令,可以用单个命令构建和运行docker。在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
}
创建一个run.bat
文件。然后在文件中添加以下内容:
docker build -t foo .
docker run -it foo
使用PowerShell或CMD运行文件,请执行以下操作:
./run.bat
考虑自动为生成的图片命名:
alias docker-up=docker build -t $(basename $PWD) . && docker run -it $(basename $PWD)