RUNআমার ডকফাইলে আমার কয়েকটি কমান্ড রয়েছে যা -no-cacheপ্রতিবারই আমি ডকার ইমেজ তৈরির সাথে চালাতে চাই ।
আমি বুঝতে পারি docker build --no-cacheপুরো ডকফাইফিলের জন্য ক্যাশে অক্ষম করবে।
নির্দিষ্ট RUN কমান্ডের জন্য কী ক্যাশে অক্ষম করা সম্ভব?
RUNআমার ডকফাইলে আমার কয়েকটি কমান্ড রয়েছে যা -no-cacheপ্রতিবারই আমি ডকার ইমেজ তৈরির সাথে চালাতে চাই ।
আমি বুঝতে পারি docker build --no-cacheপুরো ডকফাইফিলের জন্য ক্যাশে অক্ষম করবে।
নির্দিষ্ট RUN কমান্ডের জন্য কী ক্যাশে অক্ষম করা সম্ভব?
উত্তর:
আপনি যে অঞ্চলে ক্যাশে অক্ষম করতে চান তার আগে কিছু অর্থহীন এবং সস্তা-থেকে-চালিত কমান্ড সন্নিবেশ করার একটি বিকল্প রয়েছে always
এই ইস্যু মন্তব্যে প্রস্তাবিত হিসাবে , কেউ একটি বিল্ড আর্গুমেন্ট ব্লক যুক্ত করতে পারে (নাম নির্বিচারে হতে পারে):
ARG CACHEBUST=1
এই অঞ্চলের আগে, এবং প্রতিটি রানকে তার আর্গুমেন্ট --build-arg CACHEBUST=$(date +%s)হিসাবে যুক্ত করে এর মানটি সংশোধন করুন docker build(মানটিও স্বেচ্ছাচারিত হতে পারে, এটি বর্তমান তারিখের সময়, রানগুলি জুড়ে তার স্বাতন্ত্র্যতা নিশ্চিত করার জন্য)।
এটি অবশ্যই নিম্নলিখিত সমস্ত ব্লকের জন্যও ক্যাশে অক্ষম করবে, কারণ অন্তর্বর্তী চিত্রের হ্যাশ যোগফলটি আলাদা হবে, যা ডক বর্তমানে কীভাবে কাজ করে তা বিবেচনায় রেখে সত্যই নির্বাচিত ক্যাশে একটি অ-তুচ্ছ সমস্যাকে অক্ষম করে তোলে।
---> Using cacheআমার ʻ Gআরজি ক্যাচবাস্ট = 1` লাইনের অধীনে ... (এবং হ্যাঁ আমি --build-arg CACHEBUST=$(date +%s)আমার ডকার
RUN echo "$CACHEBUST"যেমন ব্যবহার করা ARGক্যাশেটিকে অকার্যকর করবে না
ব্যবহার
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
আপনি সর্বদা চালাতে চান রুন লাইনের আগে। এটি কাজ করে কারণ এডিডি সর্বদা ফাইল / ইউআরএল আনবে এবং উপরের ইউআরএল প্রতিটি অনুরোধে এলোমেলো তথ্য উত্পন্ন করে, ডকার তারপরে ফলাফলের সাথে তুলনা করে এটি ক্যাশে ব্যবহার করতে পারে কিনা তা দেখার জন্য।
আমি এটিও পরীক্ষা করে দেখেছি এবং দুর্দান্তভাবে কাজ করেছি যেহেতু এটির জন্য কোনও অতিরিক্ত ডকার কমান্ড লাইন আর্গুমেন্টের প্রয়োজন হয় না এবং ডকার-কমপোজ.আইএমএল ফাইল থেকেও কাজ করে :)
সরাসরি নয় তবে আপনি আপনার ডকফিলকে বিভিন্ন অংশে বিভক্ত করতে পারেন, একটি চিত্র তৈরি করতে পারেন, তারপরে পরের ডকফায়ফিলের শুরুতে এই চিত্রটি থেকে এবং ক্যাচিং বা ছাড়াই চিত্রটি তৈরি করতে পারেন
বৈশিষ্ট্যটি এক সপ্তাহ আগে যুক্ত হয়েছিল।
ARG FOO=bar
FROM something
RUN echo "this won't be affected if the value of FOO changes"
ARG FOO
RUN echo "this step will be executed again if the value of FOO changes"
FROM something-else
RUN echo "this won't be affected because this stage doesn't use the FOO build-arg"
https://github.com/moby/moby/issues/1996#issuecomment-550020843
আমি বিশ্বাস করি যে এটি উপরে @ স্টিভের উত্তরে সামান্য উন্নতি:
RUN git clone https://sdk.ghwl;erjnv;wekrv;qlk@gitlab.com/your_name/your_repository.git
WORKDIR your_repository
# Calls for a random number to break the cahing of the git clone
# (/programming/35134713/disable-cache-for-specific-run-commands/58801213#58801213)
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
RUN git pull
এটি গিট ক্লোনটির ডকার ক্যাশে ব্যবহার করে তবে এটি সংগ্রহস্থলের একটি অনাবৃত আপডেট চালায়।
এটি কাজ করে বলে মনে হচ্ছে এবং এটি আরও দ্রুত - তবে অন্তর্নিহিত নীতিগুলি সরবরাহ করার জন্য @ স্টিভকে অনেক ধন্যবাদ।
আরেকটি দ্রুত হ্যাক হ'ল আপনার কমান্ডের আগে কিছু এলোমেলো বাইট লিখুন
RUN head -c 5 /dev/random > random_bytes && <run your command>
5 টি এলোমেলো বাইট লিখেছেন যা একটি ক্যাশে মিস করতে বাধ্য করবে