Dockerfile에서 이미지를 빌드하고 단일 명령으로 이미지를 실행할 수 있습니까? Dockerfile을 빌드 하고 이미지를 실행 하는
명령이 하나 있습니다 .docker build
docker run -it
하나의 명령으로 쉽게 빌드하고 실행할 수 있도록이 두 명령의 조합이 있습니까?
Dockerfile에서 이미지를 빌드하고 단일 명령으로 이미지를 실행할 수 있습니까? Dockerfile을 빌드 하고 이미지를 실행 하는
명령이 하나 있습니다 .docker build
docker run -it
하나의 명령으로 쉽게 빌드하고 실행할 수 있도록이 두 명령의 조합이 있습니까?
답변:
아니요, 단일 명령이 없습니다. 그러나 이미지를 빌드 할 때 태그를 지정하면 실행하기가 더 쉬워집니다.
docker build -t foo . && docker run -it foo
docker rmi foo
입니다.
태깅을 피 docker build -q
하려면 최종 이미지 해시 만 출력합니다.이 이미지 는 다음에 대한 인수로 사용할 수 있습니다 docker run
.
docker run -it $(docker build -q .)
그리고 추가 --rm
로 docker run
당신이 종료 할 때 컨테이너가 자동으로 제거합니다.
docker run --rm -it $(docker build -q .)
docker build
: /
-q
. 자동 생성 된 태그 만 출력하려면 조용히하십시오. 그리고 그게 다야. 원하는대로 stdin을 자유롭게 변환하십시오.
docker build . | tee /dev/tty | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run --rm {}
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
}
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 {}
| tee /dev/tty
후 docker build .
전체 출력을 얻을!
재사용 가능한 솔루션을 찾는 사람이라면 내가 만든이 도커 플러그인을 설치할 수 있습니다 : https://github.com/stasmihailov/docker-script
그런 다음 다음과 같이 Dockerfile을 빌드하고 실행할 수 있습니다.
docker script ./Dockerfile