نحوه ساخت تصویر بدون کش Docker

ساخت تصاویر Docker در سریع ترین زمان ممکن ضروری است. هر چه سریعتر بتوانید یک تصویر بسازید، سریعتر میتوانید آن را آزمایش کرده و آن را در تولید مستقر کنید. کش ساخت Docker یک راه عالی برای افزایش سرعت ساخت با استفاده مجدد از لایههای ساختهای قبلی است.
نحوه کار کش کردن Docker
کش ساخت Docker بهتر است به عنوان پشته ای در نظر گرفته شود که از بالای Dockerfile شما به پایین می رود. با توجه به یک Dockerfile مانند این:
FROM node:16
RUN apt-get update && apt-get install -y curl
WORKDIR /app
COPY package.json package-lock.json /app/
RUN npm install
COPY . .
RUN npm build
هر خط در Dockerfile مرحله ای از فرآیند ساخت تصویر Docker است که یک لایه در تصویر ایجاد می کند. این لایه ها از بالا به پایین روی هم قرار می گیرند تا تصویر نهایی Docker شما را تشکیل دهند.
این وراثت، ستون فقرات کش لایه Docker را تشکیل می دهد.
وقتی یک تصویر با docker build
دستور، داکر هر مرحله را از بالا به پایین اجرا می کند. هنگام اجرای یک مرحله مشخص، بررسی می کند که آیا قبلاً یک لایه برای آن مرحله دارد یا خیر. اگر مرحله از آخرین ساخت تغییر نکرده باشد، لایه در حافظه پنهان وجود دارد و بازسازی نمی شود.
اگر مرحله تغییر کرده است (مانندی که در قسمت مشاهده می کنید COPY . .
چون کد منبع ما تغییر می کند)، کش لایه مطابقت ندارد و مرحله دوباره ساخته می شود.
همچنین اگر کش لایه Docker محلی خود را پاک کرده باشید، ممکن است مرحله در کش وجود نداشته باشد.
استفاده از کش لایه در طول docker build
به همین دلیل است که ترتیب مراحل شما ضروری است. اگر مرحله ای را تغییر دهید، تمام مراحل زیر دوباره ساخته می شوند.
ساخت یک تصویر بدون استفاده از کش --no-cache
اما، گاهی اوقات، شما می خواهید یک تصویر بدون حافظه پنهان بسازید. ممکن است مشکل ساخت را رفع اشکال کنید و بخواهید با یک صفحه تمیز شروع کنید. یا ممکن است بخواهید یک وابستگی را مجبور به ارتقا دهید. به هر دلیلی، میتوانید با استفاده از آن یک تصویر بدون حافظه پنهان بسازید --no-cache
گزینه.
docker build --no-cache .
این پرچم به Daemon Docker میگوید که در حین a از حافظه پنهان عبور کند docker build
و هر مرحله را در Dockerfile اجرا کنید. این منجر به ساخت کندتر می شود اما اطمینان حاصل می کند که هر مرحله را اجرا می کنید. مشخص کردن --no-cache
برای رفع اشکال مشکلات ساخت مفید است. همچنین می توانید از آن برای وادار کردن یک وابستگی به ارتقاء استفاده کنید، مانند curl
در ما apt-get install
در بالا.
هک در یک نقطه خاص برای باطل کردن حافظه پنهان
گاهی اوقات می خواهید حافظه پنهان را در نقطه خاصی از آن باطل کنید Dockerfile
. به عنوان مثال، ممکن است بخواهید حافظه پنهان را پس از آن باطل کنید npm install
مرحله تا بتوانید اشکال زدایی کنید npm build
گام.
شما می توانید از یک ترفند با استفاده از ARG
دستورالعمل برای آن ما می توانیم a را تنظیم کنیم ARG STOP=1
در Dockerfile ما در بالای npm build
. این باعث می شود که حافظه پنهان در آن خط زمانی که مقدار آن را تغییر می دهیم باطل شود.
...
COPY . .
ARG STOP=1
RUN npm build
حالا وقتی شما اجرا می کنید docker build
، می بینید که کش قبل از اجرای مرحله ساخت باطل می شود. با تغییر مقدار می توانید دوباره آن را باطل کنید. شما می توانید آن را در داخل Dockerfile تغییر دهید یا از یک آرگومان ساخت برای تغییر آن هنگام فراخوانی ساخت docker استفاده کنید.
docker build --build-arg STOP=2 .
نتیجه
کش ساخت Docker یک راه عالی برای افزایش سرعت ساخت با استفاده مجدد از لایههای ساختهای قبلی است. بهینه سازی برای استفاده از کش لایه تا حد امکان در نهایت سرعت ساخت Docker را افزایش می دهد.
اما گاهی اوقات، شما می خواهید یک تصویر بدون حافظه کش Docker بسازید. با استفاده از --no-cache
گزینه Docker Daemon را مجبور میکند تا هر مرحله از Dockerfile را در طول ساخت اجرا کند. این کمک می کند تا مشکلات ساخت را اشکال زدایی کند یا وابستگی های سیستم عامل را وادار به ارتقاء کند.
حافظه پنهان ساخت Docker برای ساخت تصاویر Docker بسیار مهم است. اصول دیگری برای ساختن یک تصویر Docker وجود دارد که می تواند ساخت Docker شما را حتی سریعتر کند.