55টি hadolint নিয়মে Dockerfile পরীক্ষা করুন: নির্দিষ্ট ভার্সন, root ব্যবহারকারী, ক্যাশ এবং আরও
আপনার ব্রাউজারে চলে। আপনি যা লেখেন তা কোথাও পাঠানো হয় না। যাচাই করা হয়েছে 16 অক্টোবর, 2026।Dockerfile লিন্টার ফাইলটি বিল্ড না করেই পড়ে এবং ঝুঁকিপূর্ণ বা অপচয়কারী লাইনগুলো চিহ্নিত করে। এটি hadolint-এর 55টি DL নিয়ম প্রয়োগ করে, যেমন ভার্সন ছাড়া apt-get প্যাকেজের জন্য DL3008 এবং root হিসেবে চালানোর জন্য DL3002, এবং প্রতিটি সমস্যার লাইন, মাত্রা ও সমাধান দেয়। এটি আপনার ব্রাউজারে চলে, কোনো ইনস্টল ছাড়া এবং Docker ছাড়া।
এই পৃষ্ঠাটি ইংরেজি মূল লেখা থেকে যন্ত্রের সাহায্যে অনুবাদ করা হয়েছে। এই অনুবাদটি এখনও কোনো মানুষ পর্যালোচনা করেননি, তাই ইংরেজি সংস্করণটিকেই নির্ভরযোগ্য ধরুন। ইংরেজি মূল লেখাটি পড়ুন
বাক্সে Dockerfile পেস্ট করুন, ফাইলটি খুলুন, অথবা একটি উদাহরণ দেখুন-এ ক্লিক করুন।
লাইন অনুযায়ী সাজানো সমস্যাগুলো পড়ুন: প্রতিটির একটি মাত্রা, hadolint কোড, কী ভুল এবং কীভাবে ঠিক করবেন তা আছে।
কোনো সমস্যায় ক্লিক করে তার লাইনে যান, ঠিক করুন, এবং টাইপ করার সাথে সাথে তালিকা হালনাগাদ হতে দেখুন।
সমস্যাগুলো টেক্সট হিসেবে নিতে রিপোর্ট কপি করুন-এ ক্লিক করুন, pull request বা টিকিটের জন্য।
একটি Dockerfile আজ বিল্ড হতে পারে আর পরের মাসে ভেঙে যেতে পারে: ভার্সন নির্দিষ্ট না করা বেস ইমেজ বদলে যায়, apt-get install নতুন ভার্সন নিয়ে আসে, কোনো লেয়ারে রেখে দেওয়া ক্যাশ ইমেজকে শত শত মেগাবাইট বড় করে। লিন্টার এগুলো প্রকাশের আগেই ধরে ফেলে। CI পাইপলাইনে hadolint হলো মানদণ্ড; এই পেজ আপনার ব্রাউজারে এর Dockerfile নিয়মগুলো প্রয়োগ করে।
কী পরীক্ষা করা হয়। প্রতিটি সমস্যা তার লাইন, hadolint কোড, একটি মাত্রা এবং এক লাইনের সমাধান জানায়। নিয়মগুলো পাঁচটি দলে ভাগ করা:
| দল | উদাহরণ |
|---|---|
| পুনরুৎপাদনযোগ্য বিল্ড | DL3006 ট্যাগহীন ইমেজ, DL3007 latest, DL3008 apt-get, DL3013 pip, DL3016 npm, DL3018 apk |
| ছোট ইমেজ | DL3009 apt তালিকা, DL3015 recommends, DL3019 apk ক্যাশ, DL3042 pip ক্যাশ, DL3059 অতিরিক্ত RUN লেয়ার |
| নিরাপত্তা | DL3002 root ব্যবহারকারী, DL3004 sudo, DL4006 pipefail |
| সঠিকতা | DL3011 পোর্টের সীমা, DL3021 COPY-এর গন্তব্য, DL3022 ও DL3023 স্টেজের নাম, DL3044 ENV, DL3061 ক্রম |
| স্পষ্ট উদ্দেশ্য | DL3000 WORKDIR, DL3003 cd, DL3020 ADD, DL3025 JSON CMD, DL4000 MAINTAINER |
এটি hadolint-এর কতটা কাছাকাছি। নিয়মগুলো hadolint 2.12-এর সোর্স কোড থেকে লেখা, এবং পরীক্ষাগুলো 80টির বেশি Dockerfile-এর জন্য আসল hadolint প্রোগ্রামের উত্তর ব্যবহার করে: একই লাইনে একই কোড, প্রতিবার। মাল্টি-স্টেজ বিল্ড, ONBUILD, ধারাবাহিক লাইন, escape ডিরেক্টিভ এবং লাইনের ভেতরের # hadolint ignore= মন্তব্য hadolint-এর মতোই আচরণ করে। RUN লাইনের ভেতরের শেল কোড নিয়ে ShellCheck-এর SC সতর্কতা অন্তর্ভুক্ত নয়।
কোনো নিয়ম বন্ধ করা। কোনো নির্দেশের আগের লাইনে # hadolint ignore=DL3008 লিখলে সেখানে ওই নিয়ম বাদ যায়, অথবা যেকোনো জায়গায় # hadolint global ignore=DL3059 লিখলে পুরো ফাইলে বাদ যায়। সারাংশে জানানো হয় কয়টি সমস্যা বন্ধ করা হয়েছে।
সবকিছু আপনার ব্রাউজারে চলে: আপনি যে Dockerfile পেস্ট করেন বা খোলেন তা কখনো আপলোড হয় না।
DL3008 বলে যে একটি apt-get install লাইনে ভার্সন ছাড়া প্যাকেজের নাম আছে, তাই প্রতিটি বিল্ড ভিন্ন কিছু ইনস্টল করতে পারে। package=version লিখুন, যেমন curl=7.88.1-10+deb12u5, এবং বেস ইমেজের ভেতরে apt-cache policy curl দিয়ে বর্তমান ভার্সন খুঁজে নিন। ভার্সন নির্দিষ্ট করলে ইমেজ পুনরুৎপাদনযোগ্য হয়; ভার্সন হালনাগাদ করুন ইচ্ছাকৃতভাবে, দুর্ঘটনাবশত নয়।
root হিসেবে চলা কনটেইনারের ভেতরে root অধিকার থাকে, তাই অ্যাপ্লিকেশনে ঢুকে পড়া আক্রমণকারী বেশি কিছু করতে পারে, আর মাউন্ট করা ভলিউমে কোনো ভুল হোস্টের ফাইল বদলে দিতে পারে। একটি RUN-এ ব্যবহারকারী তৈরি করুন, যেমন useradd app, এবং স্টেজটি USER app দিয়ে শেষ করুন। এর আগের বিল্ড ধাপগুলো তবুও root হিসেবে চলতে পারে।
প্রতিটি RUN একটি লেয়ার তৈরি করে, এবং পরের লেয়ারে মুছে ফেলা ফাইল আগের লেয়ারে তবুও জায়গা নেয়। apt-get update কয়েক দশ মেগাবাইটের প্যাকেজ তালিকা ডাউনলোড করে, তাই একই RUN-এ && rm -rf /var/lib/apt/lists/* দিয়ে সেগুলো মুছুন। আলাদা RUN-এ মুছলে কিছুই সাশ্রয় হয় না।
নির্দেশের ঠিক উপরে একটি মন্তব্য লিখুন: # hadolint ignore=DL3008, অথবা কমা দিয়ে আলাদা করা কয়েকটি কোড। পুরো ফাইলে কোনো নিয়ম বন্ধ করতে যেকোনো জায়গায় # hadolint global ignore=DL3059 লিখুন। দুটোই hadolint-এ এবং এই পেজে কাজ করে, আর সারাংশ গুনে দেখায় কী বন্ধ করা হয়েছে।
Dockerfile নিয়মের ক্ষেত্রে হ্যাঁ: 55টি DL কোড, তাদের মাত্রা ও শর্ত hadolint 2.12 অনুসরণ করে, এবং পরীক্ষাগুলো 80টির বেশি ফাইলে আসল hadolint প্রোগ্রামের সাথে মিলিয়ে দেখে। অন্তর্ভুক্ত নয় RUN লাইনের ভেতরের শেল কোড নিয়ে ShellCheck-এর SC সতর্কতা, এবং যে নিয়মগুলোর জন্য কনফিগারেশন ফাইল লাগে, যেমন অনুমোদিত রেজিস্ট্রি।
ফাইল ও ফোল্ডারের জন্য COPY ব্যবহার করুন। ADD URL ডাউনলোডও করে এবং লোকাল tar আর্কাইভ খুলে ফেলে, যা ঠিক এটাই চাইলে কাজের আর না চাইলে অপ্রত্যাশিত। hadolint সাধারণ ফাইলের জন্য ADD-কে DL3020 হিসেবে চিহ্নিত করে, এবং একই আর্কাইভে tar -x-এর আগে থাকা COPY-কে DL3010 হিসেবে, যেখানে ADD এক ধাপেই কাজটি করত।
হার ও নিয়ম বদলায়; কোনো অঙ্কের ওপর নির্ভর করার আগে সূত্রটি দেখে নিন।
এখনও আটকে আছেন? Dockerfile লিন্টার সম্পর্কে প্রশ্ন করুন আর যিনি জানেন তিনিই উত্তর দিতে পারেন। কোনো অ্যাকাউন্ট লাগবে না।