Dockerfileからイメージをビルドし、単一のコマンドで実行することは可能ですか?Dockerfileをビルドしてイメージを実行する
コマンドが1つあります。docker build
docker run -it
これらの2つのコマンドを組み合わせて、1つのコマンドだけでビルドと実行を簡単にする方法はありますか
Dockerfileからイメージをビルドし、単一のコマンドで実行することは可能ですか?Dockerfileをビルドしてイメージを実行する
コマンドが1つあります。docker build
docker run -it
これらの2つのコマンドを組み合わせて、1つのコマンドだけでビルドと実行を簡単にする方法はありますか
回答:
いいえ、単一のコマンドはありません。ただし、ビルド時にイメージにタグを付けると、実行が簡単になります。
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
ビルドと実行のための小さなヘルパーコマンドを1つのコマンドで作成しました。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
rdワードを取得cut -d' ' -f3
run
とxargs -I{} docker run {}
| tee /dev/tty
後docker build .
に追加してください!
再利用可能なソリューションを探している人のために、私が作成したこのDockerプラグインをインストールできます:https : //github.com/stasmihailov/docker-script
次に、次のようにDockerfileをビルドして実行します。
docker script ./Dockerfile