Czy można zbudować obraz z Dockerfile i uruchomić go jednym poleceniem?
Jest jedno polecenie, docker build
aby zbudować plik Dockerfile i docker run -it
uruchomić obraz.
Czy istnieje jakaś kombinacja tych dwóch poleceń, aby ułatwić tworzenie i uruchamianie za pomocą tylko jednego polecenia?
docker
dockerfile
Migotanie
źródło
źródło
Odpowiedzi:
Nie, nie ma jednego polecenia. Ale jeśli otagujesz swój obraz podczas jego tworzenia, łatwiej będzie go uruchomić:
źródło
docker rmi foo
.Jeśli chcesz uniknąć tagowania,
docker build -q
wyświetla tylko końcowy skrót obrazu , którego możesz użyć jako argumentu dodocker run
:Dodaj
--rm
do,docker run
jeśli chcesz, aby kontener był automatycznie usuwany po wyjściu.źródło
docker build
: /-q
wyjścia. Aby było cicho, wyświetla tylko automatycznie wygenerowany tag. I to wszystko. Możesz dowolnie zmieniać to stdin.docker build . | tee /dev/tty | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run --rm {}
Używam docker-compose dla tej wygody, ponieważ większość aplikacji, które tworzę, prędzej czy później komunikuje się z usługami zewnętrznymi, więc jeśli i tak mam zamiar go używać, dlaczego nie użyć go od początku. Wystarczy mieć plik docker-compose.yml jako:
version: "3" services: app: build: .
a następnie po prostu uruchom aplikację z:
Odbuduje obraz lub ponownie użyje kontenera w zależności od tego, czy wprowadzono zmiany w definicji obrazu.
źródło
Jeśli używasz Makefile, ten fragment jest przydatny:
Nie potrzebujesz tagowania, jak w odpowiedzi @ jonathon-reinhart, ale otrzymujesz również wynik kompilacji.
źródło
Możesz również wykonać
docker build
i potokować nazwę obrazu, który wyświetla dodocker run
:docker build
wyświetli tekst wielowierszowy... Successfully built 18e77bc0d83a
tail -n1
' '
i otrzymaj3
rd słowo za pomocącut -d' ' -f3
run
withxargs -I{} docker run {}
źródło
| tee /dev/tty
po,docker build .
aby uzyskać pełną wydajność!Komputer z systemem Windows
Utwórz
run.bat
plik. Następnie w pliku dodaj to:Aby uruchomić plik za pomocą programu PowerShell lub cmd, wykonaj następujące czynności:
źródło
docker-build-and-run
Stworzyłem małe polecenie pomocnicze do budowania i uruchamiania w jednym poleceniu. W systemie Linux lub Mac możesz dodać to do swojego,
~/.bash_profile
aby było dostępne w terminalu.Stosowanie:
Przykłady:
docker-build-and-run . -- npm run test docker-build-and-run --file ./Dockerfile . -- -v ~/volume:/var/volume -- node server.js
Scenariusz:
Dodaj to do
.sh
pliku lub dodaj do~/.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 }
źródło
Dla każdego, kto szuka rozwiązania wielokrotnego użytku, możesz zainstalować tę wtyczkę dockera, którą stworzyłem: https://github.com/stasmihailov/docker-script
Następnie możesz zbudować i uruchomić plik Dockerfile w następujący sposób:
źródło