<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های علی رحیمی</title><link>https://virgool.ir/feed/@arahimihajiabadi</link><description>یه برنامه نویس</description><language>fa</language><pubDate>2026-11-12 09:46:32</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>علی رحیمی</title><link>https://virgool.ir/@arahimihajiabadi</link></image><item><title>افزایش سرعت بیلد ها و رد شدن از تحریم های داکر به کمک BuildKit</title><link>https://virgool.ir/@arahimihajiabadi/افزایش-سرعت-بیلد-ها-و-رد-شدن-از-تحریم-های-داکر-به-کمک-buildkit-zuitcr2axuda</link><description>یکی از معضلات ما برنامه نویس های در ایران کار با داکر هست چه در اثر تحریم ها چه در اثر نت خارجی ناپایدار و کم سرعت.مشکلات ما با داکر در دو مرحله است:۱. گرفتن ایمیج ها از مخازن داکر. برای این مشکل راه حل های متداول و شناخته شده ای هست و با یه سرچ ساده میشه پیداشون کرد که به طور کلی اکثرشون از شیوه mirror registry استفاده می کنند یا به این صورت که از ابزاری مثل nexus روی یک سرور خارجی استفاده کنید و mirror شخصی خودتون رو داشته باشید(مثلا این بلاگ پست یه آموزش فارسی هست برای راه اندازی nexus) یا از mirror هایی که بعضی شرکت ها به صورت عمومی در اختیار گذاشتند استفاده کنید.۲. مرحله بیلد برای داکرفایل هایی که خودتون نوشتید. ممکنه بخواید در بیلدتون یه سری پکیج از پکیج منیجر هایی مثل apt یا apk نصب کنید و یا از npm یا pecl چیزی نصب کنید و احتمالا با این مشکل مواجه شدید که یا سرعت دانلود پکیج ها بسیار پایینه یا در برخی موارد به یه ۴۰۳ بی رحم می رسید. میخوام برای حل این مشکل یه راه حل معرفی کنم به اسم BuildKit.در اصل BuildKit یک backend builder اوپن سورس برای داکر هست که جایگزین builder قدیمی داکر شده و به طور خلاصه وظیفه انجام بیلد رو داره. اگر از نسخه های جدید داکر استفاده کنید به طور دیفالت از همین buildkit برای بیلد روی سیستم خودتون استفاده می کنه. برای استفاده ما یه مزیت داره و اونم اینه که شما می تونید یک buildkit روی یک سیستم تحت شبکه غیر از سیستم خودتون ایجاد کنید و و از طریق شبکه از اون برای بیلد هاتون استفاده کنید که اگر اون سیستم کذایی یه سرور خارجی باشه مشکل تحریم ها و سرعت دانلود های پایین رو حل می کنه.۱. روی سرور خارجی تون نسخه مناسب binary buildkit رو از گیتهاب دانلود کنید.۲. اون رو اجرا کنید و روی یه پورت خاص بایند کنید./buildkitd --addr tcp://0.0.0.0:1234۳. روی سیستم خودتون یه builder بسازید از نوع remotedocker buildx create --name=overseas --driver=remote tcp://&lt;server_ip&gt;:1234۴. برای بیلد کردن ایمیج ها با دستور docker build یا docker compose build از پارامتر --builder استفاده کنیدdocker build --builder=overseas --tag=whatever --load .&#xA;docker compose build --builder=overseas appیا می تونید از این بیلدر پیش فرض استفاده کنیدdocker buildx use overseasو الان بیلد شما روی سرور خارجی انجام میشه. مکانیزم به این شکل هست که چیزهایی که لازمه برای بیلد و روی سیستم شما هست تحت عنوان context منتقل میشه به سرور و اونجا بیلد انجام میشه و در نهایت ایمیجی که ساخته شده در سیستم شما دانلود میشه.استفاده از buildkit به این شکل مزایای دیگه ای هم داره از جمله اینکه اگر در تیم شما فرد دیگری هم بخواد همون ایمیج رو بیلد بگیره و از سرور شما استفاده کنه، سرور از cache ای که برای بیلد شما ساخته استفاده می کنه و زمان بیلد ها برای کل تیم کاهش پیدا می کنه. یا اگر لازمه در زمان بیلد دسترسی به چیزی داشته باشید که نمی خواید روی اینترنت باز بذارید می تونید فقط اجازه دسترسی به اون سرور خاص رو بدید.توجه کنید که این مقاله فقط یه معرفی مختصر بود و برای استفاده در production باید یه سری موارد امنیتی رو رعایت کنید از جمله استفاده از ssl که در github buildkit درباره اش توضیح داده شده و احتمالا لازم خواهسد داشت از یه reverse proxy استفاده کنید و احتمالا یه شکلی از authentication براش داشته باشد(این مورد رو می تونید با ssh انجام بدید به این شکل که اجازه دسترسی مستقیم به buildkit از جایی غیر از خود سرور رو ندید و برای استفاده ازش یه port forwarding انجام بدید).  همچنین اجرای مرحله ۲ فقط برای لحظاتی buildkit رو up می کنه و در صورت ری استارت سرور باید دستی دوباره روشن بشه برای حل این مشکل می تونید از systemd استفاده کنید و یه config ساده رو در ادامه براش میذارم.[Unit]&#xA;Description=Buildkit&#xA;&#xA;[Service]&#xA;User=buildkit&#xA;WorkingDirectory=/opt/buildkit/bin&#xA;ExecStart=/opt/buildkit/bin/buildkitd --addr tcp://0.0.0.0:1234&#xA;Restart=always&#xA;RestartSec=3&#xA;&#xA;[Install]&#xA;WantedBy=multi-user.target</description><category>علی رحیمی</category><author>علی رحیمی</author><pubDate>Thu, 04 Apr 2024 20:17:00 +0330</pubDate></item></channel></rss>