ساختن ایمیج های داکری به کمک BuildKit - بخش اول
خب چند سالی هست که داکر راه خوبان رو داره میره و با تعریف پروژه موبی قدم بزرگی تو پشرفت کانتینر سازی (که البته به اشتباه معمولا میگیم داکر سازی و چه اشتباه خوبی ) برداشته.
یکی از زیر پروژه های موبی که اتفاقا بحث اصلی این پست و پست های آتی هست BuildKit نام داره که در واقع ابزاری برای ساخت ایمیج هست که در ابتدا به صورت مجزا قابل استفاده بود(و البته هنوزم هست) و از داکر ورژن 18.09 به صورت داخلی به داکر اضافه شده.
export DOCKER_BUILDKIT=1
OR
vi
/etc/docker/daemon.json
{ "features": { "buildkit": true } }
systemctl daemon-reload
systemctl restart docker
بعد از تغییر بیلدر پیش فرض داکر خروجی بیلدر هنگام ساخت ایمیج به شکل زیر میشه
نکته : من برای راحتی برای دستور docker دگرنام(alias) dcr رو انتخاب کردم.
در این پست و پست های آتی به برسی قابلیت های مهم BuildKit میپردازیم
پردازش موازی
شاید یکی از مهمترین قابلیت های BuildKit پردازش موازی مراحل ساخت یک ایمیج باشه کاری که BuildKit انجام میده در داکرفایل های که به صورت multi-stage نوشته شدن براساس گراف وابستگی که میسازه در صورت اینکه تقدم و تاخر هر stage تاثیری روی همدیگه نداشته باشن مراحل هر stage رو به صورت موازی انجام میده.
برای نمونه داکرفایل فرضی زیر قراره خروجی 2 پروژه جاوا ی رو روی یک ایمج alpine کپی کنه.
FROM alpine as build-stage-1
RUN echo 'build project 1' > /tmp/project1-artifact.jar
RUN sleep 5
FROM alpine as build-stage-2
RUN echo 'build project 2' > /tmp/project2-artifact.jar
RUN sleep 5
FROM alpine as final-stage
COPY --from=build-stage-1 /tmp/project1-artifact.jar .
COPY --from=build-stage-2 /tmp/project2-artifact.jar .
و نتیجه اجرا با روش قدیمی که طبعا هر استیج به صورت پی در پی انجام میشه
همیشه داکرفایل به این سادگی نیست ولی وقتی داکرفایل پیچیده میشه سرعت ساخت ایمیج و در نتیجه بالا رفتن زمان اجرای پایپلاین CI/CD خیلی مهم میشه.
برای نمونه این داکرفایل ی هست که برای ساخت agent شخصی سازی شده جنکینز برای پروژه های .net ی نوشته شده بدون استفاده از buildkit تمامی این مراحل به صورت پشت سرهم باید اجرا بشه ولی همنطور که داخل عکس میبینید 4 قسمت رو میشه تحت stageهای جداگانه و به صورت موازی اجرا کرد.
ادامه دارد...
نظرات
ارسال یک نظر