বিদ্যমান উত্তরগুলির মধ্যে যে কেউ এই প্রশ্নের দিকে নজর রাখবে তার বেশিরভাগ অংশ আবরণ। সুতরাং আমি কেবল সিএমডি এবং আর ইউএন এর জন্য কিছু কুলুঙ্গি অঞ্চলগুলি কভার করব।
সিএমডি: নকলগুলি অনুমোদিত তবে অপচয়যোগ্য
জিঞ্জার বিয়ার একটি গুরুত্বপূর্ণ বিষয় তুলে ধরে: আপনি একাধিক সিএমডি রাখলে কোনও ত্রুটি পাবেন না - তবে এটি করা ব্যর্থ waste আমি একটি উদাহরণ দিয়ে বিস্তারিত বলতে চাই:
FROM busybox
CMD echo "Executing CMD"
CMD echo "Executing CMD 2"
যদি আপনি এটিকে একটি চিত্র হিসাবে তৈরি করেন এবং এই চিত্রটিতে একটি ধারক চালান, তবে আদা বিয়ার যেমনটি বলেছে, কেবল শেষ সিএমডিই মনোযোগ দেওয়া হবে। সুতরাং সেই ধারকটির আউটপুট হবে:
সিএমডি কার্যকর করছেন 2
আমি যেভাবে মনে করি তা হ'ল "সিএমডি" পুরো ইমেজটি তৈরি করা হচ্ছে তার জন্য একটি একক গ্লোবাল ভেরিয়েবল সেট করে চলেছে, সুতরাং ধারাবাহিকভাবে "সিএমডি" বিবৃতিগুলি পূর্ববর্তী কোনও লেখাকে সেই বৈশ্বিক চলকটিতে ওভাররাইট করে এবং চূড়ান্ত চিত্রটিতে এটি নির্মিত হয় জয় লিখতে শেষ এক। যেহেতু একটি ডকফাইফাইল উপর থেকে নীচে পর্যন্ত ক্রম সম্পাদন করে, আমরা জানি যে নীচের সর্বাধিক সিএমডি হ'ল এই চূড়ান্ত "রচনা" (রূপক ভাষায়) বলা হয়।
রুন: চিত্রগুলি ক্যাশে করা থাকলে কমান্ডগুলি কার্যকর করতে পারে না
রুন সম্পর্কে লক্ষ্য করার একটি সূক্ষ্ম বিষয় হ'ল পার্শ্ব-প্রতিক্রিয়া থাকলেও এটি খাঁটি ফাংশন হিসাবে বিবেচিত হয় এবং এভাবে ক্যাশে থাকে is এর অর্থ হ'ল যদি আরএনএনের কিছু পার্শ্ব প্রতিক্রিয়া থাকে যা ফলাফল চিত্রটি পরিবর্তন করে না এবং চিত্রটি ইতিমধ্যে ক্যাশে করা হয়েছে, তবে আরআনকে আবার কার্যকর করা হবে না এবং তাই পার্শ্ব প্রতিক্রিয়াগুলি পরবর্তী বিল্ডগুলিতে ঘটবে না। উদাহরণস্বরূপ, এই ডকফেরাইলটি নিন:
FROM busybox
RUN echo "Just echo while you work"
প্রথমবার এটি চালানোর পরে, আপনি বিভিন্ন বর্ণানুক্রমিক আইডি সহ এই জাতীয় আউটপুট পাবেন:
docker build -t example/run-echo .
Sending build context to Docker daemon 9.216kB
Step 1/2 : FROM busybox
---> be5888e67be6
Step 2/2 : RUN echo "Just echo while you work"
---> Running in ed37d558c505
Just echo while you work
Removing intermediate container ed37d558c505
---> 6f46f7a393d8
Successfully built 6f46f7a393d8
Successfully tagged example/run-echo:latest
লক্ষ্য করুন উপরোক্তভাবে প্রতিধ্বনি সম্পাদিত হয়েছিল। দ্বিতীয়বার যখন আপনি এটি চালান, এটি ক্যাশে ব্যবহার করে এবং আপনি বিল্ডের আউটপুটে কোনও প্রতিধ্বনি দেখতে পাবেন না:
docker build -t example/run-echo .
Sending build context to Docker daemon 9.216kB
Step 1/2 : FROM busybox
---> be5888e67be6
Step 2/2 : RUN echo "Just echo while you work"
---> Using cache
---> 6f46f7a393d8
Successfully built 6f46f7a393d8
Successfully tagged example/run-echo:latest