با استفاده از این نکات مفید، مطمئن شوید که از ایمیج ها Docker به طور کامل استفاده می کنید.
تعاریف کلیدی
- برای امنیت و عملکرد بهتر از ایمیج ها رسمی Docker استفاده کنید. ساختن ایمیج ها خود ممکن است منجر به پیکربندی نادرست شود و زمان بیشتری را صرف کند.
- برای جلوگیری از رفتار غیرقابل پیش بینی و برخورد با وابستگی ها از نسخه های خاصی از ایمیج ها داکر استفاده کنید. کشیدن و ساخت با استفاده از ایمیج ها یک نسخه خاص.
- با استفاده از دستور docker scan ایمیج ها Docker را برای آسیبپذیریهای امنیتی اسکن کنید. تعیین کنید که آیا یک ایمیج به اندازه کافی برای برنامه شما ایمن است یا خیر.
Docker محبوبترین نرمافزار کانتینرسازی است، اما همه از آن به نحو احسن استفاده نمیکنند. اگر بهترین روشهای Docker را دنبال نکنید، میتوانید برنامههای خود را در برابر مسائل امنیتی یا مشکلات عملکرد آسیبپذیر بگذارید.
در اینجا برخی از بهترین روشهایی وجود دارد که میتوانید برای استفاده از ویژگیهای Docker به طور مدبرانه اتخاذ کنید. این اقدامات امنیت را بهبود می بخشد و از ایجاد فایل های Docker قابل نگهداری اطمینان حاصل می کند.
1. از Official Docker Images استفاده کنید
هنگام کانتینری کردن برنامه خود، باید از یک ایمیج داکر استفاده کنید. می توانید یک ایمیج با پیکربندی سفارشی بسازید یا از ایمیج ها رسمی Docker استفاده کنید.
ساخت ایمیج ها خود مستلزم آن است که تمام تنظیمات را خودتان مدیریت کنید. به عنوان مثال، برای ساخت یک ایمیج برای یک برنامه node.js، باید node.js و وابستگی های آن را دانلود کنید. این فرآیند زمان بر است و ممکن است به پیکربندی صحیح منجر نشود.
Docker توصیه میکند از یک ایمیج رسمی node.js استفاده کنید که با تمام وابستگیهای صحیح همراه باشد. ایمیج ها Docker دارای معیارهای امنیتی بهتری هستند، سبک وزن هستند و برای محیط های مختلف آزمایش می شوند. می توانید ایمیج ها رسمی را در صفحه ایمیج ها رسمی Docker پیدا کنید.
2. از نسخه های خاص Docker Image استفاده کنید
معمولاً وقتی یک ایمیج رسمی را میکشید، آن ایمیجی است که آخرین برچسب را دارد که نشاندهنده آخرین نسخه بهروز شده آن ایمیج است. هر بار که یک کانتینر از آن ایمیج می سازید، نسخه متفاوتی از آخرین ظرف است.
ساختن با نسخههای مختلف ایمیج Docker میتواند باعث رفتار غیرقابل پیشبینی در برنامه شما شود. ممکن است نسخه ها با وابستگی های دیگر تداخل داشته باشند و در نهایت باعث از کار افتادن برنامه شما شوند.
Docker توصیه می کند که با استفاده از ایمیج ها یک نسخه خاص، بکشید و بسازید. ایمیج ها رسمی همچنین دارای اسناد هستند و رایج ترین موارد استفاده را پوشش می دهند.
به عنوان مثال، به جای docker pull alpine، از docker pull alpine:3.18.3 استفاده کنید. داکر آن نسخه خاص را خواهد کشید. سپس می توانید از آن در ساخت های متوالی استفاده کنید و خطاهای موجود در برنامه خود را کاهش دهید. میتوانید نسخههای خاص ایمیج ها را در صفحه رسمی ایمیج Docker، در زیر برچسبهای پشتیبانی شده و پیوندهای Dockerfile مربوطه پیدا کنید:
3. ایمیج ها را برای آسیب پذیری های امنیتی اسکن کنید
چگونه می توانید تشخیص دهید که ایمیجی که می خواهید با آن بسازید هیچ آسیب پذیری امنیتی ندارد؟ با اسکن آن. با استفاده از دستور docker scan می توانید ایمیج ها داکر را اسکن کنید. نحو به شرح زیر است:
docker scan [IMAGE]
برای اسکن ایمیج ابتدا باید وارد داکر شوید.
docker login
سپس، ایمیج خاصی را که می خواهید بررسی کنید اسکن کنید:
docker scan ubuntu:latest
ابزاری به نام Synk ایمیج را اسکن میکند و هر آسیبپذیری را با توجه به شدت آنها فهرست میکند. میتوانید نوع آسیبپذیری و پیوندهایی به اطلاعات مربوط به آن، از جمله نحوه رفع آن را ببینید. شما می توانید از اسکن تشخیص دهید که آیا ایمیج به اندازه کافی برای برنامه شما ایمن است یا خیر.
4. از ایمیج ها Docker با اندازه کوچک استفاده کنید
هنگامی که یک ایمیج داکر را میکشید، با تمام ابزارهای سیستم همراه است. این کار اندازه ایمیج را با ابزارهایی که نیاز ندارید افزایش می دهد.
ایمیج ها Docker بزرگ فضای ذخیره سازی را اشغال می کنند و می توانند زمان اجرای کانتینرها را کاهش دهند. آنها همچنین احتمال بیشتری از آسیب پذیری های امنیتی دارند.
با استفاده از ایمیج ها Alpine می توانید اندازه ایمیج ها Docker را کاهش دهید. ایمیج ها آلپ سبک وزن هستند و تنها با ابزارهای لازم ارائه می شوند. آنها فضای ذخیره سازی را کاهش می دهند و باعث می شوند برنامه شما سریعتر و کارآمدتر اجرا شود.
شما یک نسخه Alpine را برای اکثر ایمیج ها رسمی در Docker پیدا خواهید کرد. در اینجا نمونه ای از نسخه های Alpine برای PostgreSQL آمده است:
5. لایه های ذخیره ایمیج را بهینه کنید
هر دستور در Dockerfile یک لایه روی ایمیج را نشان می دهد. لایه ها ابزارهای مختلفی دارند و عملکردهای مختلفی را انجام می دهند. اگر به ایمیج ها رسمی در Docker Hub نگاه کنید، دستورالعمل های استفاده شده برای ایجاد آنها را خواهید دید.
Dockerfile شامل همه چیزهایی است که برای ایجاد ایمیج نیاز دارید. این یکی از دلایلی است که بسیاری از توسعه دهندگان Docker را به ماشین های مجازی ترجیح می دهند.
در اینجا ساختار یک نمونه ایمیج آلپاین آمده است:
وقتی برنامه خود را بر اساس یک ایمیج میسازید، لایههای بیشتری به ایمیج اضافه میکنید. Docker دستورالعملها را روی یک Dockerfile از بالا به پایین اجرا میکند، و اگر یک لایه تغییر کند، Docker باید لایههای بعدی را بازسازی کند.
بهترین روش این است که Dockerfile خود را از کمترین تغییر به فایل هایی که اغلب تغییر می کنند مرتب کنید. دستورالعمل هایی که تغییر نمی کنند، مانند نصب، می توانند در بالای فایل باشند.
وقتی فایلی را تغییر میدهید، Docker از فایلهای تغییر یافته میسازد و فایلهای بدون تغییر را در بالای آن ذخیره میکند. بنابراین، روند سریعتر اجرا می شود.
به مثال نشان داده شده در ایمیج بالا نگاه کنید. اگر تغییری در فایل های برنامه وجود داشته باشد، Docker از آنجا می سازد. نیازی به نصب مجدد بسته های npm ندارد.
اگر از ایمیج بسازید، روند سریعتر از ساخت مجدد همه لایههای دیگر انجام میشود. ذخیره سازی همچنین سرعت کشیدن و فشار دادن ایمیج ها از داکر هاب را افزایش می دهد.
7. از یک فایل .dockerignore استفاده کنید
هنگام ساخت یک ایمیج با استفاده از Dockerfile، ممکن است بخواهید اطلاعات خاصی را خصوصی نگه دارید. برخی از فایلها و پوشهها ممکن است بخشی از پروژه باشند، اما شما نمیخواهید آنها را در فرآیند ساخت قرار دهید.
استفاده از فایل .dockerignore اندازه ایمیج را به میزان قابل توجهی کاهش می دهد. این به این دلیل است که فرآیند ساخت تنها شامل فایل های ضروری است. همچنین به خصوصی نگه داشتن فایل ها و جلوگیری از افشای کلیدهای مخفی یا رمزهای عبور کمک می کند.
فایل .dockerignore فایلی است که شما در همان پوشه Dockerfile خود ایجاد می کنید. این یک فایل متنی است، بسیار شبیه به یک فایل .gitignore، که حاوی نام فایلهایی است که نمیخواهید در فرآیند ساخت قرار دهید.
در اینجا یک مثال است:
8. از اصل کمترین امتیاز کاربر استفاده کنید
بهطور پیشفرض، داکر از کاربر ریشه بهعنوان ادمین برای اجازه اجرای دستورات استفاده میکند، اما این عمل بدی است. اگر آسیبپذیری در یکی از کانتینرها وجود داشته باشد، هکرها میتوانند به میزبان Docker دسترسی داشته باشند.
برای جلوگیری از این سناریو، یک کاربر و گروه اختصاصی ایجاد کنید. می توانید مجوزهای لازم را برای گروه تنظیم کنید تا از اطلاعات حساس محافظت کند. اگر کاربر به خطر بیفتد، می توانید بدون افشای کل پروژه، آنها را حذف کنید.
در اینجا مثالی وجود دارد که نحوه ایجاد یک کاربر و تنظیم مجوزهای آنها را نشان می دهد:
برخی از ایمیج ها پایه دارای کاربران شبه هستند که در آنها ایجاد شده است. می توانید به جای مجوزهای کاربر root از کاربران نصب شده استفاده کنید.
چرا باید بهترین شیوه های Docker را بپذیرید؟
بهترین روشها روشی عالی برای کاهش آسیبپذیریها و نوشتن کد پاکتر است. بهترین شیوه های بسیاری وجود دارد که می توانید برای هر ویژگی Docker که استفاده می کنید اعمال کنید.
یک پروژه به خوبی سازماندهی شده، همگام سازی را با سایر ابزارهای ارکستراسیون مانند Kubernetes آسان تر می کند. می توانید با موارد ذکر شده در مقاله شروع کنید و با یادگیری Docker موارد بیشتری را به کار بگیرید.