دستور docker build برای ساخت ایمیجهای داکر استفاده میشود. این دستور به صورت لایهای عمل میکند و هر لایه یک تغییر در ایمیج را ایجاد میکند. این لایهها به صورت مجزا ذخیره میشوند و در صورت نیاز میتوان از آنها مجدد استفاده کرد.
برای اینکه دستور docker build سریعتر عمل کند، از قابلیت کش استفاده میشود. این قابلیت باعث میشود که لایههایی که قبلاً ساخته شدهاند، مجدداً ایجاد نشوند و تنها لایههایی که تغییر کردهاند، مجدداً ساخته شوند.
نحوه کار کش در دستور docker build
دستور docker build ابتدا فایل Dockerfile را بررسی میکند و لایههای مورد نیاز برای ساخت ایمیج را تعیین میکند. سپس برای هر لایه، یک کانتینر موقت ایجاد میکند و تغییرات مورد نظر را در آن اعمال میکند. در نهایت، محتویات کانتینر موقت را به عنوان یک لایه جدید در ایمیج ذخیره میکند.
اگر لایهای قبلاً ساخته شده باشد، دستور docker build آن لایه را از کش میخواند و مجدداً آن را نمیسازد. تنها در صورتی که تغییراتی در فایلهای لایه ایجاد شده باشد، دستور docker build آن لایه را مجدداً میسازد.
نحوه فعال کردن کش در دستور docker build
کش به صورت پیشفرض در دستور docker build فعال است. اما میتوانید با استفاده از گزینه --no-cache آن را غیرفعال کنید.
برای فعال کردن کش در دستور docker build میتوانید از گزینه --cache-from استفاده کنید. این گزینه به شما اجازه میدهد که مشخص کنید که از کدام ایمیجها برای کش استفاده شود.
نحوه پاک کردن کش در دستور docker build
برای پاک کردن کش در دستور docker build میتوانید از گزینه --cache-clean استفاده کنید. این گزینه باعث میشود که تمام لایههای کش شده پاک شوند.
مثال
فرض کنید که فایل Dockerfile زیر را دارید:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
این فایل Dockerfile یک ایمیج داکر از nginx ایجاد میکند.
برای ساخت این ایمیج، دستور زیر را اجرا کنید:
docker build -t my-nginx .
این دستور ابتدا فایل Dockerfile را بررسی میکند و متوجه میشود که این ایمیج از دو لایه تشکیل شده است:
لایه اول ایمیج ubuntu:latest را به عنوان پایه استفاده میکند.
لایه دوم بسته nginx را نصب میکند و پورت 80 را برای استفاده باز میکند.
دستور docker build ابتدا لایه اول را میسازد. این لایه از قبل ساخته شده است، بنابراین دستور docker build آن را از کش میخواند.
سپس دستور docker build لایه دوم را میسازد. این لایه قبلاً ساخته نشده است، بنابراین دستور docker build آن را مجدداً میسازد.
در نهایت، دستور docker build ایمیج my-nginx را با استفاده از دو لایه ساخته شده ایجاد میکند.
اگر تغییراتی در فایل Dockerfile ایجاد کنید و دوباره دستور docker build را اجرا کنید، دستور docker build تنها لایههایی را که تغییر کردهاند مجدداً میسازد. به عنوان مثال، اگر بسته nginx را به نسخه جدیدی بهروزرسانی کنید، دستور docker build تنها لایه دوم را مجدداً میسازد.
_______
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#هوتن_همتی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______