একটি কমান্ড দিয়ে ডকফাইফিল তৈরি করুন এবং চালান


136

ডকফাইফাইল থেকে চিত্র তৈরি এবং এটি একটি একক কমান্ড দিয়ে চালানো সম্ভব? একটি ডকফেরিল তৈরি করতে এবং চিত্রটি চালানোর জন্য একটি
কমান্ড রয়েছে ।docker builddocker run -it

এই দুটি কমান্ডের কোনও সমন্বয় কি কেবল একটি কমান্ড দিয়ে তৈরি করা এবং চালানো সহজ করে তোলে?


আপনি যদি আপনার ব্যবহারের ক্ষেত্রে বিশদভাবে বর্ণনা করেন তবে আরও ভাল বিকল্প আমরা উপস্থাপন করতে পারি।
জোনাথন রাইনহার্ট

7
@ জোনাথনরেইনহার্ট আমার ব্যবহারের বিষয়টি হ'ল আমি যখন ডকফেরফিল সম্পাদনা করছি তখন দ্রুত পুনরাবৃত্তি হয়।
শুভম চৌধুরী চৌধুরী

উত্তর:


154

না, কোন আদেশ নেই। তবে আপনি যদি নিজের চিত্রটি নির্মাণের সাথে ট্যাগ করেন তবে এটি চালানো আরও সহজ হবে:

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

2
ভাল উত্তর কারণ তারপর আপনি সহজে ইমেজ যদি আপনি চান অপসারণ করতে পারেন: docker rmi foo
সার্কিস ভেরোজিয়ান

237

আপনি যদি ট্যাগিং এড়াতে চান, docker build -qতবে চূড়ান্ত চিত্রের হ্যাশ ব্যতীত অন্য কোনও ফলাফল দেয় না , যা আপনি যুক্তি হিসাবে ব্যবহার করতে পারেন docker run:

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

এবং Add --rmকরতে docker runআপনি যখন এটি থেকে প্রস্থান ধারক স্বয়ংক্রিয়ভাবে সরানো চাই।

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

9
গৃহীত উত্তরের চেয়ে ভাল, যেহেতু এটি স্থানীয় চিত্র সংগ্রহস্থলে বিশৃঙ্খলা সৃষ্টি করে না
ইনসপ

18
@ ইনসপ প্রকৃতপক্ষে, এটি স্থানীয় চিত্রও তৈরি করে। তারা ঠিক ট্যাগ করা হয় না।
জোনাথন রাইনহার্ট

2
দুঃখের বিষয় এটি আপনাকে নিয়মিত বিল্ড আউটপুটটি দেখায় না docker build: /
লায়ন

1
@ লায়ন যে -qবিকল্প পয়েন্ট । এটিকে শান্ত করার জন্য, কেবলমাত্র স্বয়ংক্রিয়ভাবে তৈরি ট্যাগ আউটপুট করতে। এবং এটাই. আপনার পছন্দ মতো স্টিডিনকে রূপান্তর করতে নির্দ্বিধায় অনুভব করুন
সালাথিয়েল জেনেস

docker build . | tee /dev/tty | tail -n1 | cut -d' ' -f3 | xargs -I{} docker run --rm {}
বিল্ডটির

5

আপনি যদি মেকফাইল ব্যবহার করেন তবে আমি এই স্নিপেটটি দরকারী বলে মনে করি:

build:
    @docker build . | tee .buildlog

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

@ জোনাথন-রিইনার্ট উত্তরের মতো আপনার ট্যাগিংয়ের দরকার নেই, তবে আপনি বিল্ড আউটপুটও পাবেন।


5

আমি এই সুবিধার জন্য ডকার-কমপোজ ব্যবহার করি যেহেতু আমি তৈরি করছি বেশিরভাগ অ্যাপ্লিকেশন শীঘ্রই বা বাহ্যিক পরিষেবাগুলির সাথে কথা বলছে, তাই যদি আমি এটি যেভাবেই ব্যবহার করতে যাচ্ছি তবে কেন শুরু থেকে এটি ব্যবহার করবেন না। কেবলমাত্র ডকার-কমপোজ.আইএমএল রয়েছে:

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

এবং তারপরে কেবল অ্যাপটি চালিয়ে যান:

docker-compose up --build app

এটি চিত্র পুনর্নির্মাণ করবে বা চিত্রের সংজ্ঞা পরিবর্তন হয়েছে কিনা তা নির্ভর করে ধারকটিকে পুনরায় ব্যবহার করবে।


0

উইন্ডোজ পিসি

একটি run.batফাইল তৈরি করুন। তারপরে ফাইলটিতে এটি যুক্ত করুন:

docker build -t foo . 
docker run -it foo

পাওয়ারশেল বা সেন্টিমিডি ব্যবহার করে ফাইলটি চালনার জন্য এটি করুন:

./run.bat

0

docker-build-and-run

আমি একক কমান্ডে বিল্ডিং এবং চালনার জন্য একটি সামান্য সহায়ক সহায়ক তৈরি করেছি। লিনাক্স বা ম্যাক এ, আপনি ~/.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
}

0

আপনি এটি করতে 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 .পূর্ণ আউটপুট পেতে!
অলিভারপুল

0

পুনরায় ব্যবহারযোগ্য সমাধানের সন্ধানকারী যে কোনও ব্যক্তির জন্য, আপনি তৈরি করা এই ডকার প্লাগইনটি ইনস্টল করতে পারেন: https://github.com/stasmihailov/docker-script

তারপরে আপনি নিম্নোক্তভাবে একটি ডকফাইফিল তৈরি এবং পরিচালনা করতে পারেন:

docker script ./Dockerfile
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.