021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

بهترین روش های نوشتن داکرفایل(قسمت آخر)

در این قسمت قرار است که تمامی مطالب باقی مانده از سری مقالات بهترین روش های نوشتن داکرفایل را که شامل موارد همچون ذخیره ایمیج در حافظه پنهان یا cache را توضیح دهیم.

استدلال های چند خطی را مرتب کنید

هر وقت که امکانش هست با مرتب کردن الفاظ چند خطی الفبایی ، تغییرات بعدی را راحت تر کنید.
این کار کمک می کند تا از تکرار پکیج ها جلوگیری کنید و لیست آنها را به سادگی بروز کنید.
این امر همچنین خواندن و بررسی  PRها را بسیار ساده تر می کند. اضافه کردن یک فضای قبل از backslash (\) نیز کمک می کند.
در اینجا نمونه ای از buildpack-deps ایمیج آورده شده است:

RUN apt-get update && apt-get install -y \
  bzr \
  cvs \
  git \
  mercurial \
  subversion

ذخیره در حافظه پنهان (cache)

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

اگر شما نمیخواهید وقتی ایمیجی را میسازید از کش (cache) استفاده کنید میتوانید از –no-cache=true هنگام زدن دستور docker build استفاده کنید.

هنگامی که شما این اجازه را به داکر میدهید که از کش (cache) استفاده کند مسئله حائز اهمیت این است که بدانید و درک کنید در چه زمانی داکر قادر به پیدا کردن imageمطابق است و در چه زمانی قادر به انجام این کار نیست. قوانین پایه و اساسی که داکر از آن پیروی میکند را در ادامه شرح خواهیم داد.

  • هنگامی که یک image والد یا به اصطلاح parent میسازیم که در حال حاضر در کش (cache) است، دستورهای بعدی با تمام ایمیج های فرزند مقایسه میشوند که آیا دستورها دقیقا با همان دستورهای که ایمیج والد را ساخته اند مطابقت دارد یا خیر در غیر این صورت ایمیجی که در کش (cache) است معتبر نیست!
  • در بیشتر موارد ، صرفاً مقایسه دستورالعمل موجود در Dockerfile با یکی از ایمیج های فرزند کافی است. با این حال ، دستورهای خاص نیاز به بررسی و توضیح بیشتری دارد.
  • برای دستور های ADD و COPY ، محتوای فایل(های) موجود در ایمیج بررسی شده و checksum برای هر پرونده محاسبه می شود.آخرین دفعه ای که فایل تغییر پیدا کرده یا آخرین دسترسی به فایل در این checksum ها لحاظ نمیشوند. وقتی که کش(cache) بررسی میشود این checksum ها با checksumهای ایمیج های موجود دیگر مقایسه میشوند. اگر چیزی در فایل(ها) مانند محتوا و متادیتا تغییر کرده باشد ، حافظه پنهان (cache) نامعتبر است.
  • به جز دستورات ADD و COPY، دیگر کش(حافظه پنهان) مورد فایل های داخل کانتینرها را بررسی نمیکند تا تطابقی پیدا کنند. برای مثال هنگام پردازش دستور به روزرسانی RUN apt-get –y  پرونده های بروزرسانی شده در کانتینر مورد بررسی قرار نمیگیرند در این صورت تنها میتوانید از رشته  دستورات یا command string برای پیدا کردن مورد مطابق استفاده کنید.

هنگامی که ایمیج حافظه پنهان  فاقد اعتبار شد تمامی دستورات بعدی در داکرفایل (dockerfile)  ایمیج های جدیدی ایجاد میکنند و از حافظه پنهان استفاده نمیشود.

دستور های داکرفایل

این توصیه ها برای کمک به شما در ایجاد یک Dockerfile کارآمد و پایدار طراحی شده اند.

FROM

هروقت که مقدور بود و شما خواستید از ایمیج رسمی به عنوان ایمیج پایه (base) استفاده کنید. پیشنهاد ما Alpine image است که به شدت کنترل شده و با اندازه(size) کوچک  (در حال حاضر کمتر از 5 مگابایت) در حالی که هنوز هم یک توزیع کامل لینوکس است.

LABEL

برای کمک به سازماندهی ایمیج با پروژه ، برچسب اطلاعات لایسنس ، کمک به اتوماسیون یا به دلایل دیگر می توانید برچسب های خود را به ایمیج اضافه کنید. برای هر برچسب ، یک خط با LABEL و یک یا چند جفت key-value اضافه کنید. مثال های زیر قالب های مختلف قابل قبول را نشان می دهد.

# Set one or more individual labels
LABEL com.example.version="0.0.1-beta"
LABEL vendor1="ACME Incorporated"
LABEL vendor2=ZENITH\ Incorporated
LABEL com.example.release-date="2015-02-12"
LABEL com.example.version.is-production=""

یک ایمیج میتواند بیشتر از 1 برچسب داشته باشد. قبل از docker 1.10 توصیه میشد که تمامی برچسب ها را تنها با یک دستور LABEL اضافه کنید که لایه های اضافی ایجاد نشود. دیگر اجباری به این امر نیست اما همچنان میتوانید با یک دستور LABEL چند برچسب اضافه کنید.

# Set multiple labels on one line
LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12"

تکه کد بالا میتواند مانند زیر هم نوشته شود:

# Set multiple labels at once, using line-continuation characters to break long lines
LABEL vendor=ACME\ Incorporated \
      com.example.is-beta= \
      com.example.is-production="" \
      com.example.version="0.0.1-beta" \
      com.example.release-date="2015-02-12"

RUN

جملات RUN طولانی یا پیچیده را بر روی چندین خط جدا شده با بک اسلش تقسیم کنید تا Dockerfile شما قابل خواندن ، قابل فهم و نگهداری(پشتیبانی) شود.

APT-GET

احتمالا متداول ترین دستوری که با RUN استفاده میشود APT-GET است زیرا که با آن ما سایر پکیج‌ها را نصب میکنیم.

دستور RUN APT-GET دارای خطاهای است که در ادامه ما به شرح و جستوجوی آنها میپردازیم.

مقالات مرتبط

نوشتن داکرفایل ( کانتینر )
نوشتن داکرفایل ( multi-stage )
نوشتن داکرفایل (انواع build context)
بهترین روش برای نوشتن داکرفایل ( pipe – stdin )
بهترین روش ها برای نوشتن داکرفایل(build context)
بهترین روش ها برای نوشتن داکرفایل
همچنین شما میتوانید از اینجا و اینجا سایر مقالات در مورد داکر را مطالعه کنید.

محمد حجازی

31 مطلب منتشر شده

محمد حجازی هستم برنامه نویس و علاقمند به تکنولوژی و کامپیوتر. در تلاشیم که همه با هم یه قدم در راستای گسترش علم برداریم.

درباره این مطلب نظر دهید !

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3
%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
2