فصل دوم: ساخت ایمیج با Dockerfile

لایه‌ها و کش ساخت image

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

داکر هر image را از لایه‌های متعدد (layers) می‌سازد؛ هر دستور در Dockerfile معمولاً یک لایه‌ی جدید تولید می‌کند. این لایه‌ها روی هم قرار می‌گیرند و یک فایل‌سیستم واحد تشکیل می‌دهند. مزیت بزرگ این معماری، امکان اشتراک‌گذاری لایه‌ها بین ایمیج‌های مختلف و کش شدن آن‌هاست: اگر یک لایه تغییر نکرده باشد، داکر آن را دوباره نمی‌سازد و از کش استفاده می‌کند.

به همین دلیل، ترتیب دستورات در Dockerfile اهمیت زیادی دارد. لایه‌هایی که کمتر تغییر می‌کنند (مثل نصب وابستگی‌ها) باید زودتر بیایند و لایه‌هایی که زیاد تغییر می‌کنند (مثل کد خود برنامه) باید در انتها قرار بگیرند:

# درست: وابستگی‌ها قبل از کد
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
# نادرست: هر تغییر کد، نصب مجدد وابستگی‌ها را هم اجبار می‌کند
COPY . .
RUN pip install -r requirements.txt

در حالت دوم، حتی یک تغییر کوچک در کد برنامه باعث می‌شود کش لایه‌ی COPY . . باطل شود و در نتیجه لایه‌ی RUN pip install هم دوباره از صفر اجرا شود، چون داکر لایه‌ها را به‌ترتیب و بر اساس تغییر لایه‌ی قبلی نامعتبر می‌کند. رعایت این ترتیب در پروژه‌های واقعی می‌تواند زمان ساخت image را از چند دقیقه به چند ثانیه کاهش دهد و فرایند توسعه را به‌طور محسوسی سریع‌تر کند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.