programing

명령 하나로 도커 파일 빌드 및 실행

batch 2023. 8. 4. 22:46
반응형

명령 하나로 도커 파일 빌드 및 실행

도커 파일에서 이미지를 빌드하고 단일 명령으로 실행할 수 있습니까?
명령이 하나 있습니다.docker buildDocker 파일을 빌드하고docker run -it이미지를 실행합니다.

이 두 명령을 조합하여 하나의 명령으로 쉽게 빌드하고 실행할 수 있습니까?

태깅을 피하고 싶다면,docker build -q최종 이미지 해시만 출력합니다. 이 해시를 인수로 사용할 수 있습니다.docker run:

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

추가--rm로.docker run용기가 나갈 때 자동으로 제거되도록 하려면 이 옵션을 선택합니다.

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

아니요, 단일 명령은 없습니다.그러나 이미지를 만들 때 태그를 지정하면 실행하기가 더 쉬워집니다.

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

구축 중인 대부분의 앱이 조만간 외부 서비스와 통신하기 때문에 이러한 편의를 위해 도커 컴포지를 사용합니다. 어쨌든 사용할 예정이라면 처음부터 사용해 보는 것이 어떻습니까?docker-compose.yml을 다음과 같이 지정합니다.

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

그런 다음 다음으로 앱을 실행합니다.

docker-compose up --build app

이미지 정의가 변경되었는지 여부에 따라 이미지를 재구성하거나 컨테이너를 재사용합니다.

Makefile을 사용하면 이 스니펫이 유용합니다.

build:
    @docker build . | tee .buildlog

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

@jonathon-rainhart 답변처럼 태그를 지정할 필요는 없지만 빌드 출력도 얻을 수 있습니다.

최근에 사용에 대한 프로모션 메시지를 받기 시작했습니다.docker scan체격이 크고 난 후에

'도커 스캔'을 사용하여 이미지에 대해 Snyk 테스트를 실행하여 취약성을 찾고 이를 해결하는 방법을 배웁니다.

가 예전에 했던 일은 다음과 같습니다.

docker build --quiet .

그리고 지금 작동하는 것은 다음과 같습니다.

docker build --quiet . | head -n1

또한 할 수 있습니다.docker build및 파이프 이미지 이름을 출력합니다.docker run:

docker build . | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run {}
  • docker build다중 줄 텍스트를 제공합니다.... Successfully built 18e77bc0d83a
  • 당신은 마지막 대사를 얻습니다.tail -n1
  • 로 나누어진.' '그리고 구함3와의 말다툼.cut -d' ' -f3
  • 그것을 의론으로 보다run와 함께xargs -I{} docker run {}

재사용 가능한 솔루션을 찾는 사람이라면 누구나 https://github.com/stasmihailov/docker-script 에서 만든 도커 플러그인을 설치할 수 있습니다.

그런 다음 다음 Docker 파일을 만들고 실행할 수 있습니다.

docker script ./Dockerfile

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
}

윈도 PC

만들기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)

언급URL : https://stackoverflow.com/questions/45141402/build-and-run-dockerfile-with-one-command

반응형