
خب، قراره یه مقالهی باحال و خودمونی دربارهی 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 بقیهش رو هندل میکنه.
فرض کن یه پروژه داری که دو تا image نیاز داره: یکی برای فرانتاند (وب) و یکی برای بکاند (سرور). قبلاً باید دو تا دستور docker build جداگونه مینوشتی. حالا با Docker Bake، یه فایل به اسم docker-bake.hcl درست میکنی و توش اینجوری مینویسی:
group "default" {
targets = ["frontend", "backend"]
}
target "frontend" {
context = "./frontend"
dockerfile = "frontend.Dockerfile"
tags = ["myapp/frontend:latest"]
}
target "backend" {
context = "./backend"
dockerfile = "backend.Dockerfile"
tags = ["myapp/backend:latest"] }
حالا فقط کافیه این دستور رو بزنی:
docker build bake
کی باید از Docker Bake استفاده کنی؟
اگه یکی از این موقعیتها برات آشناست، Docker Bake میتونه رفیق شفیقت بشه:
ابزار Docker Bake مثل یه دستیار باحاله که میاد و کارای سخت و تکراری ساخت image داکری رو برات ساده میکنه. چه برنامهنویس تازهکاری باشی که تازه داری با داکر کار میکنی، چه یه حرفهای که تو CI/CD غرق شدی، این ابزار میتونه کلی وقت و اعصاب برات ذخیره کنه.
ممنونم که وقت گذاشتی و مقاله رو خوندی.