TGViewer
DevTwitter | توییت برنامه نویسی DevTwitter | توییت برنامه نویسی @devtwitter · 32.3K subscribers
Post #12543 5.7K
چند وقت پیش متوجه شدم که Docker Image پروژه‌ام بعد از هر تغییر کوچکی در سورس کد، از اول Build می‌شه.

مشکل رو با AI بررسی کردم و فهمیدم مشکل از ترتیب چند خط در Dockerfile بوده است!
من این اشتباه رو در 90٪ پروژه‌هام انجام داده بودم؛ اشتباهی که هر روز چند دقیقه و گاها چند ساعت از زمانم رو هدر داده.
به دنبال بررسی بیشتر موضوع ترتیب دستورات در Dockerfile؛ رسیدم به مفهوم Docker build cache.

اگر ترتیب دستورات در Dockerfile شما شبیه این هستش:
COPY . .
RUN npm install

هر بار که حتی یک خط از app.js یا هر فایل دیگه‌ای رو تغییر بدین، Docker مجبور میشه دوباره مرحله‌ی npm install رو اجرا کنه.
در حالی که وابستگی‌های پروژه اصلاً تغییر نکردند!

دلیلش چیه؟
داکر Image رو به صورت لایه به لایه می‌سازه و هر دستور در Dockerfile یک Layer جدید ایجاد می‌کنه.
اگر یک Layer تغییر کنه، خود اون Layer به همراه تمام Layerهای بعدیش دوباره ساخته میشن.

به همین دلیل، این ترتیب در Dockerfile بسیار بهینه‌تر هستش:
COPY package*.json ./
RUN npm install
COPY . .

چون فایل‌های`package.json` و package-lock.json معمولاً کمتر از سورس پروژه تغییر می‌کنند.
بنابراین Docker می‌تونه Layer مربوط به نصب پکیج‌ها رو Cache کنه و در Buildهای بعدی، اگر فقط کد برنامه تغییر کرده باشد، فقط سورس کد رو کپی کنه و دیگه npm install رو ران نکنه.

نتیجه؟
مصرف کمتر CPU و Disk و Build سریع‌تر

این اصل فقط مخصوص Node.js نیست و در همه اکوسیستم‌ها وجود داره؛ مثلا در پایتون اول باید فایل requirements.txt کپی بشه و pip install انجام بشه و بعدا سورس کد پروژه کپی بشه.

فایل‌هایی که کمتر تغییر می‌کنند رو زودتر کپی کنید و دستور کپی فایل‌هایی که بیشتر تغییر می‌کنند رو در انتهای Dockerfile قرار بدین.

گاهی بهینه‌سازی یعنی اضافه کردن تکنولوژی جدید.
اما گاهی فقط یعنی ترتیب دو خط کد را عوض کنید

داکیومنت داکر در رابطه با این موضوع:
https://docs.docker.com/build/cache/

@DevTwitter | <Razie RezaAli/>
  • ❤ 57
  • 🍌 25
  • 👍 12
More from @devtwitter
  1. Oct 2, 2026با RyzerDNS، تحریم‌ها دیگر مانع شما نیستند. از هوش مصنوعی‌هایی مثل ChatGPT، Gemini و Claud…
  2. Oct 2, 2026گوگل چند وقت پیش ax رو معرفی کرد که اُپن سورسه ولی کم دیدم در موردش حرف زده بشه. مشکل kube…
  3. Oct 2, 2026الان Open Dots معرفی شد؛ همون قابلیت‌ها، با یک‌دهم هزینه! شرکن OpenAI همین دیروز Dot رو بر…
  4. Oct 2, 2026مخزن Traycer: مرکز فرماندهی برای کدنویسی ایجنت‌هایی که داری (Claude Code، Codex، Cursor و.…
  5. Oct 2, 2026🚀 کمپین «شروع امن» VulnCity شروع شد! خیلی از استارتاپ‌ها و شرکت‌های کوچیک، نیاز به امنیت…
  6. Oct 2, 2026Post #13409
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →