使用一个命令构建和运行Dockerfile

yhxst69z  于 2022-12-03  发布在  Docker
关注(0)|答案(9)|浏览(180)

是否可以从Dockerfile构建映像并使用单个命令运行它?

有一个命令docker build用于构建Dockerfile,docker run -it用于运行映像。
这两个命令是否有任何组合,使它更容易构建和运行只使用一个命令?

vohkndzv

vohkndzv1#

如果您想避免标记,docker build -q只输出最终图像散列,您可以将其用作docker run的参数:

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

如果希望容器在退出时自动删除,则将--rm添加到docker run

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

9avjhtql2#

不,没有单一的命令。但是如果在构建映像时标记映像,运行起来会更容易:

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

8hhllhi23#

我使用docker-compose就是为了这个方便,因为我构建的大多数应用程序迟早都要与外部服务通信,所以如果我无论如何都要使用它,为什么不从一开始就使用它呢?

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

然后运行应用程序:

docker-compose up --build app

它将重建映像或重用容器,具体取决于是否对映像定义进行了更改。

9wbgstp7

9wbgstp74#

如果您使用Makefile,我发现以下代码片段很有用:

build:
    @docker build . | tee .buildlog

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

您不需要像在@jonathon-reinhart回答中那样进行标记,但您也可以获得构建输出。

ia2d9nvy

ia2d9nvy5#

最近,我开始收到一条关于在每次构建后使用docker scan的 * 促销 * 消息。
使用“Docker scan”对图像运行Snyk测试,以查找漏洞并了解如何修复它们
这是我 * 曾经 * 做的:

docker build --quiet .

以下是目前正在进行的工作:

docker build --quiet . | head -n1
hgncfbus

hgncfbus6#

您还可以执行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获得第三个字3
  • 将其作为参数传递给run,并使用xargs -I{} docker run {}
ljsrvy3e

ljsrvy3e7#

x1月0n1x日

我已经创建了一个小的助手命令,用于在一个命令中构建和运行。在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
}
htrmnn0y

htrmnn0y8#

对于任何人寻找一个可重用的解决方案,你可以安装这个我创建的Docker插件:https://github.com/stasmihailov/docker-script
然后,您可以构建并运行一个Dockerfile,如下所示:

docker script ./Dockerfile
wixjitnu

wixjitnu9#

Windows个人电脑

创建一个run.bat文件,然后在文件中添加以下内容:

docker build -t foo . 
docker run -it foo

要使用powershell或cmd运行该文件,请执行以下操作:

./run.bat

相关问题