6 هک برای کاهش اندازه تصویر Docker

عکس پروفایل نویسنده

@jamie1023نمودار سحابی

Nebula Graph یک پایگاه داده نمودار توزیع شده منبع باز است: https://github.com/vesoft-inc/nebula

اگر ده حرف مهم در صنعت فناوری در سال 2019 وجود داشته باشد ، ظرف مطمئناً یکی از آنها خواهد بود. با محبوبیت داکر ، سناریوهای بیشتری از داکر در قسمت جلویی استفاده می کنند. این مقاله نشان می دهد که چگونه ما از Docker در رابط تجسم استفاده می کنیم نمودار سحابی، یک پایگاه داده نمودار منبع باز توزیع شده.

چرا از داکر استفاده می شود

داکر به طور گسترده ای در توسعه روزمره جلو استفاده می شود. Nebula Graph Studio (ابزاری برای تجسم برای نمودار سحابی) بر اساس ملاحظات زیر از داکر استفاده می کند:

  1. محیط کار یکپارچه: چندین سرویس در پشت ابزارهای ما وجود دارد ، مانند خدمات موجود از پشته های مختلف فناوری و منابع استاتیک خالص جلویی.
  2. هزینه کاربر پایین: در حال حاضر ، سرویس های ابری در دست توسعه هستند. ما تجربه کاملی از خدمات ترکیبی را می خواهیم و Docker این امکان را با توانایی شروع و استفاده از همه خدمات به صورت محلی فقط در یک مرحله فراهم می کند.
  3. استقرار سریع: این پروژه جلویی از Nebula Graph Docker Image الهام گرفته شده است.

ساخت داکر تصویر

قبل از استفاده از سرویس های خود با Docker ، ابتدا باید یک تصویر بسازیم. در اینجا ما به یک فایل پیکربندی به نام Dockerfile نیاز داریم که شامل توصیف مراحل ساخت است. به طور خلاصه ، باید پروژه را در تصویر کپی کرده و روش راه اندازی را تنظیم کنیم:

# Select base image
FROM node:10
# Set work directory
WORKDIR /nebula-web-console
# Copy the current project to the /nebula-web-console directory of the image
ADD . /nebula-web-console
# Download front-end dependency in the image
RUN npm install
# Run the building
RUN npm run build
EXPOSE 7001
# Deployment commands executed when the image starts
CMD ["npm", "run", "docker-start"]

کاهش تصویر Docker

در پرونده پیکربندی فوق ، یک تصویر Docker با اندازه 1.3 گیگابایت ساخته خواهد شد که کمی ترسناک به نظر می رسد زیرا بارگیری حتی با شبکه سریع بسیار وقت گیر است. این کاملا غیر قابل قبول است.

پس از برخی تحقیقات ، نکاتی را یاد گرفتیم که به کاهش اندازه تصویر Docker کمک می کند.

1. استفاده از تصویر پایه کوچکتر

تصویر پایه Docker (به عنوان مثال گره فوق الذکر: 10) تصویر اصلی است که روی آن لایه ها اضافه می کنید و یک تصویر نهایی حاوی برنامه های خود ایجاد می کنید. وجود دارد نسخه های متعدد از تصویر Node.js در DockerHub ، و هر یک از آنها متفاوت است محیط داخلی. به عنوان مثال ، نسخه alpine یک تصویر ساده تر از سیستم لینوکس است که برخی از ابزارها مانند bash ، curl و غیره را برای کاهش اندازه حذف می کند.

بر اساس نیازهای خود ، ما تصویر پایه را به Alpine تغییر می دهیم و برای کاهش تصویر docker از 1.3 گیگابایت به 500 مگابایت + دوباره از نو می سازیم. بنابراین اگر تصویر docker که در حال ساخت آن هستید بسیار بزرگ است ، می توانید جایگزین تصویر اصلی شوید.

2. ساخت چند مرحله ای

ساخت چند مرحله ای در docker ویژگی جدیدی است که در docker 17.05 معرفی شده است. این روشی برای کاهش اندازه تصویر ، ایجاد سازماندهی بهتر از دستورات docker و بهبود عملکرد است در حالی که خواندن و فهم dockerfile آسان است.

3. اصل ساختمان داکر

به طور خلاصه ، ساخت چند مرحله ای تقسیم dockerfile به چندین مرحله برای انتقال مصنوع مورد نیاز از یک مرحله به مرحله دیگر و در نهایت تحویل مصنوع نهایی در آخرین مرحله است. به این ترتیب ، تصویر نهایی ما هیچ محتوای غیر ضروری به جز مصنوع مورد نیاز ما نخواهد داشت. بیایید یک مثال را در نظر بگیریم:

# Set up the image generated in the first step and name it builder
FROM node:10-alpine as builder
WORKDIR /nebula-web-console
# Copy the current project to the image
ADD . /nebula-web-console
# Start building
RUN npm install
RUN npm run build
....

# Start the second step build
FROM node:10-alpine
WORKDIR /nebula-web-console
# Copy the product of the first step image to the current image. Only one image layer is used here, which saves the number of image layers in the previous building step.

COPY --from=builder . /nebula-web-console
CMD ["npm", "run", "docker-start"]

4. .dockerignore

مشابه .gitignore شناخته شده که هنگام استفاده از دستور COPY یا ADD برای کپی یا افزودن پرونده ها ، از پرونده های غیرضروری (مانند پرونده های سند ، پرونده های git ، node_modules و غیره) صرف نظر می کند ، ما می توانیم از .dockerignore برای تعیین پرونده هایی استفاده کنیم که از آنها چشم پوشی می شود.

5. ادغام چند لایه در یک

هنگام ساخت تصویر Docker با Dockerfile ، هر عملیات بر اساس تصویر مرحله قبل یک لایه جدید اضافه می کند. برای کاهش لایه ها می توانیم از & amp ؛ عملیات چندگانه استفاده کنیم. مثلا:

# The two operations represent two layers
RUN npm install
RUN npm run build

دستور بالا را با یکی ادغام کنید:

# It becomes a single layer with &
RUN npm install && npm run build

6. بهینه سازی منظم Front-End

  1. کد زشت را فشرده و کد منبع را حذف کنید. این مرحله را هنگام ساخت تصویر به پایان برسانید تا اندازه تصویر بیشتر کاهش یابد.
  2. فقط بارگیری کد مورد نیاز برای تولید با node_modules این مرحله را هنگام استقرار به پایان برسانید ، مطمئن شوید که فقط کد وابستگی شخص ثالث را برای تولید بارگیری کنید:
    npm install --production
  3. منبع عمومی را روی CDN قرار دهید اگر انتظار می رود تصویر در محیط شبکه اجرا شود ، پرونده های عمومی بزرگ (تصاویر و کتابخانه های شخص ثالث و غیره) را بر روی سرور CDN قرار دهید تا برخی منابع از هم جدا شوند و اندازه تصویر بیشتر کاهش یابد.

پیشنهادات فوق فقط برای مراجعه شماست. با توجه به اینکه ساختمان تصویر خود محیطی برای اجرای کد است ، می توانید بهینه سازی های جلویی منظم تری را به تصویر منتقل کنید.

خلاصه

موارد فوق تجربه ما در زمینه کاهش تصویر Docker از Nebula Graph Studio است. اگر سوالی دارید لطفا برای ما نظر بگذارید. خوش آمدید Nebula Graph Studio را در GitHub امتحان کنید.

منابع

همچنین منتشر شده است اینجا.

برچسب ها

با هکر نون همراه باشید

حساب رایگان خود را ایجاد کنید تا قفل تجربه خواندن سفارشی خود را باز کنید.