ویرگول
ورودثبت نام
نوید خلیلیان
نوید خلیلیانFull Stack Developer - Dev Ops
نوید خلیلیان
نوید خلیلیان
خواندن ۴ دقیقه·۷ ماه پیش

انتشار Docker Bake (سورپرایز داکر)



خب، قراره یه مقاله‌ی باحال و خودمونی درباره‌ی Docker Bake بنویسم که تازه تو Docker Desktop 4.38 به‌صورت عمومی (GA) منتشر شده.🚀


چی هست حالا؟!

تصور کن داری یه پروژه‌ی برنامه‌نویسی کار می‌کنی و باید چند تا image داکری بسازی. حالا هر کدوم از این image ها کلی دستور و flag و متغیر محیطی دارن که باید تو خط فرمان (CLI) بنویسی. خب، این کار یه کم اعصاب‌خوردکنه، نه؟ یهو یه پرچم رو اشتباه می‌زنی، یا یه متغیر رو جا می‌ندازی و کل پروسه‌ی ساخت به هم می‌ریزه. 😫 حالا Docker Bake اومده که این دردسرها رو برات حل کنه!


ابزار Docker Bake بهت اجازه می‌ده به‌جای اینکه کلی دستور پیچیده تو خط فرمان بنویسی، همه‌چیز رو تو یه فایل مرتب و خوانا تعریف کنی. این فایل می‌تونه به فرمت HCL (زبان HashiCorp)، YAML یا JSON باشه. انگار داری یه فایل شبیه Dockerfile یا docker-compose میسازی، همه‌ی دستورات و مراحل رو یه جا لیست می‌کنی، بعد فقط می‌گی «بیک کن!» و داکر خودش بقیه کار رو انجام می‌ده. 🥮


خب، حالا بیایم چند تا دلیل باحال رو با هم ببینیم که چرا Docker Bake این‌قدر جذابه:


دیگه لازم نیست خط فرمان رو شخم بزنی!

قبلاً باید برای هر image یه دستور docker build طولانی می‌نوشتی، پر از پرچم و متغیر. حالا با Docker Bake، همه‌چیز رو تو یه فایل می‌نویسی و فقط با یه دستور ساده (docker build bake) همه‌چیز رو اجرا می‌کنی. انگار از یه جنگل پر از علف هرز اومدی تو یه باغ مرتب! 🌳

همه‌چیز با هم و سریع!

اگه چند تا image داری که باید بسازی، Docker Bake می‌تونه همه‌شون رو موازی (parallel) بسازه. این یعنی به‌جای اینکه یکی‌یکی منتظر تموم شدن هر ساخت بمونی، همه با هم ساخته می‌شن و کلی تو وقت صرفه‌جویی می‌شه. تازه، اگه چند تا image سری فایل مشترک دارن، Docker Bake اینا رو یک‌بار می‌خونه و کار رو سریع‌تر می‌کنه (بهش می‌گن deduplication).

خوانا و تمیز

فایل‌های Bake خیلی خوانا و مرتبن. می‌تونی توشون همه‌ی تنظیمات، وابستگی‌ها و هدف‌ها (targets) رو مشخص کنی. این یعنی اگه یکی دیگه بخواد پروژه‌ت رو ببینه، خیلی راحت می‌فهمه چی به چیه. حتی می‌تونی مثل یه حرفه‌ای، از متغیرها و ارث‌بری (inheritance) استفاده کنی که کدت تمیزتر بشه.

منعطف و قدرتمند

می‌تونی با Docker Bake کارهای پیچیده‌ای مثل ساخت image برای چند پلتفرم (مثل linux/amd64 و linux/arm64) یا حتی matrix builds رو انجام بدی. این یعنی می‌تونی یه عالمه تنظیمات مختلف رو با یه فایل ساده مدیریت کنی.

دوست خوب Docker Compose

اگه از قبل با Docker Compose کار می‌کردی، خبر خوب اینه که Bake می‌تونه مستقیم از فایل‌های Compose استفاده کنه. یعنی لازم نیست همه‌چیز رو از صفر شروع کنی. فقط فایل Compose رو بنداز تو پروژه‌ت و Bake بقیه‌ش رو هندل می‌کنه.

یه مثال ساده: چطور با Docker Bake شروع کنیم؟

فرض کن یه پروژه داری که دو تا image نیاز داره: یکی برای فرانت‌اند (وب) و یکی برای بک‌اند (سرور). قبلاً باید دو تا دستور docker build جداگونه می‌نوشتی. حالا با Docker Bake، یه فایل به اسم docker-bake.hcl درست می‌کنی و توش این‌جوری می‌نویسی:

group &quotdefault&quot {
targets = [&quotfrontend&quot, &quotbackend&quot]
}
target &quotfrontend&quot {
context = &quot./frontend&quot
dockerfile = &quotfrontend.Dockerfile&quot
tags = [&quotmyapp/frontend:latest&quot]
}
target &quotbackend&quot {
context = &quot./backend&quot
dockerfile = &quotbackend.Dockerfile&quot
tags = [&quotmyapp/backend:latest&quot] }

حالا فقط کافیه این دستور رو بزنی:

docker build bake

چند سالی Docker Bake به‌صورت آزمایشی بود و حالا که عمومی شده، کلی ویژگی باحال بهش اضافه کردن:

  • انتقال سریع‌تر فایل‌ها: اگه چند تا target داری که از یه سری فایل مشترک استفاده می‌کنن، Docker Bake این فایل‌ها رو فقط یه بار منتقل می‌کنه (deduplicated context transfers). این باعث می‌شه سرعت ساخت خیلی بالاتر بره.
  • ویژگی‌های جدید HCL: می‌تونی از توابع سفارشی و ماتریس‌های پیچیده‌تر استفاده کنی.
  • پشتیبانی بهتر از CI/CD: اگه تو خط تولید نرم‌افزارت (CI/CD pipeline) از داکر استفاده می‌کنی، Bake خیلی راحت با ابزارهای مثل Jenkins یا GitHub Actions و Gitlab جور درمیاد.
  • اعتبارسنجی متغیرها: مثل Terraform، می‌تونی قوانین اعتبارسنجی برای متغیرها تعریف کنی که اشتباهات رو زودتر پیدا کنی.

کی باید از Docker Bake استفاده کنی؟

اگه یکی از این موقعیت‌ها برات آشناست، Docker Bake می‌تونه رفیق شفیقت بشه:

  • داری چند تا image داکری رو همزمان می‌سازی (مثل یه پروژه‌ی میکروسرویس).
  • پروژه‌ مونوریپو (monorepo) هست و کلی سرویس مختلف داری.
  • خسته شدی از نوشتن اسکریپت‌های طولانی برای مدیریت build ها.
  • می‌خوای ساخت‌های چندپلتفرمی (multi-platform) انجام بدی بدون دردسر.
  • می‌خوای یه روش تمیز و استاندارد برای تیم‌ت داشته باشی که همه بتونن بفهمن چی به چیه.

چطور شروع کنی؟

  • داکر رو آپدیت کن: مطمئن شو که Docker Desktop 4.38 یا بالاتر رو نصب کردی.📷
  • یه فایل Bake بساز: یه فایل به اسم docker-bake.hcl یا docker-bake.json تو پروژه‌ت درست کن.
  • تنظیماتت رو بنویس: هدف‌ها (targets) و گروه‌ها (groups) رو تو فایل تعریف کن.
  • دستور رو اجرا کن: با docker build bake ساخت رو شروع کن.
  • لذت ببر! 😎

حرف آخر

ابزار Docker Bake مثل یه دستیار باحاله که میاد و کارای سخت و تکراری ساخت image داکری رو برات ساده می‌کنه. چه برنامه‌نویس تازه‌کاری باشی که تازه داری با داکر کار می‌کنی، چه یه حرفه‌ای که تو CI/CD غرق شدی، این ابزار می‌تونه کلی وقت و اعصاب برات ذخیره کنه.

ممنونم که وقت گذاشتی و مقاله رو خوندی.


dockerdevops
۲
۰
نوید خلیلیان
نوید خلیلیان
Full Stack Developer - Dev Ops
شاید از این پست‌ها خوشتان بیاید