داکر (Docker) یک پلتفرم متنباز است که به توسعهدهندگان و سیستم ادمینها امکان میدهد برنامهها را درون کانتینرها بستهبندی، توزیع و اجرا کنند.
بطور کلی کانتینرها به شما اجازه میدهند تا یک محیط ایزوله برای اجرای برنامهها ایجاد کنید، این محیط شامل همه چیزهایی است که برنامه برای اجرا نیاز دارد، از جمله کد، کتابخانهها، ابزارهای سیستمعامل و تنظیمات.
تصاویر داکر (Docker Images) نسخههای ایزولهشدهای از یک برنامه هستند که شامل همهی موارد لازم برای اجرای برنامه، از جمله کد، کتابخانهها، وابستگیها و تنظیمات، میباشند. این تصاویر به عنوان قالبهایی برای ساخت و اجرای کانتینرها استفاده میشوند.
تصاویر داکر غیرقابل تغییر (Immutable) هستند، به این معنی که پس از ساخته شدن، تغییر نمیکنند. این ویژگی باعث میشه تا اطمینان حاصل بشه که برنامهها در هر محیطی به یک شکل اجرا میشود. بصورت کلی قابل حمل بودن تصاویر به این معناست که میتوان آنها را از یک سیستم به سیستم دیگر انتقال داد و اطمینان داشت که بدون تغییر اجرا خواهند شد.
بهینهسازی تصاویر Docker برای استفاده بهینه از منابع، استقرار سریعتر و امنیت بهتر ضروری هست.
در این مقاله سعی می کنیم در مورد بهبود داکر ایمیج ها صحبت کنیم و چندین روش مفید برای بهبود و بهینه سازی تصاویر داکر بیان کنیم. پس تا انتهای مطلب با ما همراه باشید:
انتخاب یک تصویر پایه کم حجم و سبک: با یک تصویر پایه کم حجم مانند Alpine Linux یا Scratch شروع کنید. این تصاویر سبک هستند و فقط اجزای ضروری را دارند، که باعث کاهش اندازه تصویر و سطح حمله میشود.
FROM nginx:alpine
اصل مسئولیت واحد: هر تصویر Docker باید یک مسئولیت واحد داشته باشد. از ترکیب چند سرویس در یک تصویر خودداری کنید. به جای آن، برای هر سرویس تصاویر جداگانهای ایجاد کنید و از Docker Compose یا Kubernetes برای ترکیب آنها استفاده کنید.
استفاده از ساختهای(build) چندمرحلهای: ساختهای چندمرحلهای به شما اجازه میدهند از چند دستور FROM در یک Dockerfile استفاده کنید. این کار باعث کاهش اندازه نهایی تصویر با حذف وابستگیهای زمان ساخت و مصنوعات از تصویر نهایی میشود.
# مرحله ساخت
FROM node:14-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# مرحله تولید
FROM node:14-alpine as production
WORKDIR /app
COPY --from=build /app/package*.json ./
RUN npm ci --production
COPY --from=build /app/dist ./dist
CMD ["npm", "start"]
کاهش لایهها: تعداد لایهها در تصویر Docker خود را با ترکیب چندین دستور به یک دستور RUN کاهش دهید. این کار باعث کاهش اندازه تصویر و تسریع فرآیند ساخت میشود.
RUN apt-get update && \
apt-get install -y git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
استفاده از .dockerignore: یک فایل .dockerignore ایجاد کنید تا فایلها و دایرکتوریهای غیرضروری را از بستر ساخت Docker حذف کنید. این کار زمان ساخت را کاهش میدهد و از وارد شدن فایلهای بزرگ به تصویر جلوگیری میکند.
استفاده از تگهای مشخص: هنگام pull گرفتن از تصاویر یا وابستگیها، از تگهای نسخه مشخص به جای تگ latest استفاده کنید تا از بازتولیدپذیری اطمینان حاصل کرده و از تغییرات ناخواسته جلوگیری کنید.
FROM nginx:<tag>
بهینهسازی دستورات Dockerfile: از نسخههای مشخص برای نصب بستهها استفاده کنید، تعداد وابستگیها را به حداقل برسانید و پس از نصب بستههای غیرضروری را حذف کنید تا اندازه تصویر کاهش یابد.
بازبینی لایههای تصویر: از ابزارهایی مانند docker history و docker inspect برای تحلیل لایههای تصویر و شناسایی فرصتهای بهینهسازی استفاده کنید. فایلها و دستورات غیرضروری را از Dockerfile حذف کنید تا اندازه لایهها کاهش یابد.
استفاده از Pruning تصاویر Docker: به طور منظم تصاویر، کانتینرها، حجمها و شبکههای غیرقابل استفاده Docker را با استفاده از دستور docker system prune پاکسازی کنید. این کار به بازیابی فضای دیسک و بهبود عملکرد کمک میکند.
پیادهسازی Caching: از کش ساخت Docker با ساختاردهی Dockerfile خود به گونهای که حداکثر استفاده از کش را داشته باشد، بهره ببرید. دستورات متغیر را در انتهای Dockerfile قرار دهید تا اعتبار کش کمتر کاهش یابد.
اسکن امنیتی: از ابزارهای اسکن امنیتی Docker برای شناسایی و رفع آسیبپذیریهای امنیتی در تصاویر Docker استفاده کنید. به طور منظم تصاویر خود را برای آسیبپذیریها اسکن کرده و بهروزرسانیهای امنیتی را اعمال کنید.
پاکسازی پس از نصبها: فایلها و کشهای موقت ایجاد شده در طول نصب بستهها را حذف کنید تا اندازه تصویر کاهش یابد.
استفاده از Docker Squash: Docker Squash میتواند برای کاهش اندازه تصاویر Docker با ادغام لایهها استفاده بشه. با این حال، دقت کنید چون میتونه زمان ساخت رو افزایش بده و قابلیت کش را کاهش دهد.
با پیادهسازی این تکنیکهای بهینهسازی، میتوانید تصاویر Docker کوچکتر، سریعتر و ایمنتری ایجاد کنید.
امیدوارم این مقاله برای شما مفید بوده باشه. اگر شما هم روش دیگه ای برای بهینه سازی تصاویر داکر دارید از بخش نظرات برای ما ارسال کنید. :)
برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *
ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *
هنوز برای این مطلب نظری ارسال نشده است!