একটি ডকার চিত্র আসলে ফাইল সিস্টেম স্তরগুলির একটি লিঙ্কযুক্ত তালিকা। ডকফাইফাইলের প্রতিটি নির্দেশ একটি ফাইল সিস্টেম স্তর তৈরি করে যা সংশ্লিষ্ট নির্দেশের প্রয়োগের আগে এবং পরে ফাইল সিস্টেমের পার্থক্য বর্ণনা করে। docker inspect
Subcommand ফাইলসিস্টেম স্তর একটি লিঙ্ক তালিকা হচ্ছে তার প্রকৃতি প্রকাশ করার জন্য একটি Docker ছবিতে ব্যবহার করা যাবে।
কোনও ছবিতে ব্যবহৃত স্তরগুলির সংখ্যা গুরুত্বপূর্ণ
- চিত্রগুলিকে ধাক্কা দেওয়া বা টানানোর সময় এটি সমবর্তী আপলোড বা ডাউনলোডের সংখ্যাকে প্রভাবিত করে।
- একটি ধারক শুরু করার সময়, স্তরগুলি একত্রিত হয়ে পাত্রে ব্যবহৃত ফাইল সিস্টেম উত্পাদন করতে; যত বেশি স্তর জড়িত থাকে তত কার্যকারিতা খারাপ হয়, তবে বিভিন্ন ফাইল সিস্টেম ব্যাকেন্ডগুলি এর দ্বারা আলাদাভাবে প্রভাবিত হয়।
চিত্রগুলি কীভাবে তৈরি করা উচিত তার এর বেশ কয়েকটি পরিণতি রয়েছে। আমি যে প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ পরামর্শ দিতে পারি তা হ'ল:
পরামর্শ # 1 নিশ্চিত করুন যে আপনার উত্স কোডটি জড়িত রয়েছে সেই বিল্ড স্টেপগুলি ডকস্পাইলে যতদূর সম্ভব দেরি হয়ে আসে এবং কোনও &&
বা একটি ব্যবহার করে পূর্ববর্তী কমান্ডগুলির সাথে আবদ্ধ না হয় ;
।
এর কারণ, পূর্ববর্তী সমস্ত পদক্ষেপগুলি ক্যাশে করা হবে এবং সংশ্লিষ্ট স্তরগুলি বার বার ডাউনলোড করার প্রয়োজন হবে না। এর অর্থ দ্রুত বিল্ডস এবং দ্রুত রিলিজ, যা সম্ভবত আপনি চান। আকর্ষণীয়ভাবে যথেষ্ট, ডকার ক্যাশে অনুকূল ব্যবহার করা আশ্চর্যজনকভাবে শক্ত।
আমার দ্বিতীয় পরামর্শটি কম গুরুত্বপূর্ণ তবে এটি রক্ষণাবেক্ষণের দৃষ্টিভঙ্গি থেকে খুব দরকারী বলে মনে করি:
পরামর্শ # 2 ডকফাইলে জটিল কমান্ডগুলি লিখবেন না বরং অনুলিপি এবং কার্যকর করতে হবে এমন স্ক্রিপ্টগুলি ব্যবহার করুন।
এই পরামর্শ অনুসরণ করে একজন ডকফায়াইল দেখতে পাবেন
COPY apt_setup.sh /root/
RUN sh -x /root/apt_setup.sh
COPY install_pacakges.sh /root/
RUN sh -x /root/install_packages.sh
ইত্যাদি। একাধিক কমান্ডের সাথে বাধ্যবাধকতার পরামর্শের &&
সীমিত সুযোগ রয়েছে। স্ক্রিপ্টগুলি দিয়ে লেখা অনেক সহজ, যেখানে আপনি অতিরিক্ত কাজ এড়াতে বা ডকুমেন্টেশনের প্রয়োজনে ফাংশন ইত্যাদি ব্যবহার করতে পারেন।
প্রাক প্রসেসর দ্বারা আগ্রহী এবং COPY
পদক্ষেপগুলির কারণে সৃষ্ট ছোট ওভারহেড এড়াতে ইচ্ছুক এবং প্রকৃতপক্ষে ফ্লাইটে ডকফাইফিল তৈরি করছে যেখানে
COPY apt_setup.sh /root/
RUN sh -x /root/apt_setup.sh
ক্রম দ্বারা প্রতিস্থাপিত হয়
RUN base64 --decode … | sh -x
যেখানে …
বেস 64-এনকোডড সংস্করণ apt_setup.sh
।
আমার তৃতীয় পরামর্শটি সেই লোকদের জন্য যারা দীর্ঘ বিল্ডের সম্ভাব্য ব্যয়ে আকার এবং স্তরগুলির সীমাবদ্ধ করতে চান।
পরামর্শ # 3with
মধ্যবর্তী স্তরগুলিতে উপস্থিত ফাইলগুলি এড়ানোর জন্য ফলাফল-সিস্টেমটি নয় তবে -আইডিম ব্যবহার করুন ।
কিছু ডকার নির্দেশ দ্বারা যুক্ত এবং পরবর্তী নির্দেশাবলীর দ্বারা মুছে ফেলা ফলস্বরূপ ফাইলসিস্টেমটিতে উপস্থিত নেই তবে এটি ডকর স্তরগুলিতে দু'বার উল্লেখ করা হয়েছে যা নির্মাণে ডকার ইমেজ গঠন করে। একবার, নির্দেশে যুক্ত হওয়ার পরে স্তরটিতে নাম এবং পূর্ণ সামগ্রী সহ এবং এটি একবার সরানোর নির্দেশের ফলে স্তরটিতে মুছে ফেলার নোটিশ হিসাবে।
উদাহরণস্বরূপ, ধরুন আমাদের অস্থায়ীভাবে একটি সি সংকলক এবং কিছু চিত্র প্রয়োজন এবং এটি বিবেচনা করুন
# !!! THIS DISPLAYS SOME PROBLEM --- DO NOT USE !!!
RUN apt-get install -y gcc
RUN gcc --version
RUN apt-get --purge autoremove -y gcc
(আরও বাস্তব উদাহরণ উদাহরণস্বরূপ --version
পতাকাটির সাথে উপস্থিতি প্রমাণ করার পরিবর্তে সংকলকটির সাথে কিছু সফ্টওয়্যার তৈরি করবে ))
ডকফেরফিল স্নিপেট তিনটি স্তর তৈরি করে, প্রথমটি সম্পূর্ণ জিসিসি স্যুট ধারণ করে যাতে এটি চূড়ান্ত ফাইল সিস্টেমে উপস্থিত না থাকলেও সংশ্লিষ্ট ডেটা এখনও একই পদ্ধতিতে চিত্রের অংশ এবং যখনই ডাউনলোড করা, আপলোড করা এবং আনপ্যাক করা দরকার যখনই চূড়ান্ত চিত্র হয়।
with
-Idiom বিছিন্ন রিসোর্স মালিকানা ও রিসোর্স এটি ব্যবহার যুক্তিবিজ্ঞান থেকে মুক্তি করার জন্য কার্যকরী প্রোগ্রামিং একটি সাধারণ ফর্ম। এই আইডিয়োমটি শেল-স্ক্রিপ্টিংয়ে স্থানান্তর করা সহজ, এবং আমরা পরামর্শ # 2 এরCOPY & RUN
মতো ব্যবহার করতে পূর্ববর্তী কমান্ডগুলি নিম্নলিখিত স্ক্রিপ্ট হিসাবে পুনরায় লিখতে পারি ।
# with_c_compiler SIMPLE-COMMAND
# Execute SIMPLE-COMMAND in a sub-shell with gcc being available.
with_c_compiler()
(
set -e
apt-get install -y gcc
"$@"
trap 'apt-get --purge autoremove -y gcc' EXIT
)
with_c_compiler\
gcc --version
কমপ্লেক্স কমান্ডগুলি ফাংশনে রূপান্তরিত হতে পারে যাতে তারা তাদের খাওয়ানো যায় with_c_compiler
। বেশ কয়েকটি with_whatever
ফাংশনের কল চেইন করাও সম্ভব , তবে খুব পছন্দসই নয়। (শেলের আরও অজানা বৈশিষ্ট্যগুলি ব্যবহার করে, স্বতন্ত্র with_c_compiler
জটিল কমান্ডগুলি গ্রহণ করা অবশ্যই সম্ভব তবে এই জটিল কমান্ডগুলিকে ফাংশনগুলিতে আবৃত করা সব দিক থেকে ভাল)
আমরা যদি পরামর্শ # 2 উপেক্ষা করতে চাই তবে ফলস্বরূপ ডকফেরফিল স্নিপেটটি হবে
RUN apt-get install -y gcc\
&& gcc --version\
&& apt-get --purge autoremove -y gcc
যা পড়া এবং বজায় রাখা এতটা সহজ নয় কারণ অচলতার কারণে। শেল-স্ক্রিপ্ট রূপটি কীভাবে গুরুত্বপূর্ণ অংশটির উপর জোর দেয়, gcc --version
শৃঙ্খলাবদ্ধভাবে &&
এই অংশটি শোরগোলের মাঝখানে কবর দেয়।