Build Cache Optimization đ â
āĻĄāĻāĻžāϰ āĻāĻŽā§āĻ āĻŦāĻŋāϞā§āĻĄ āĻāϰāĻžāϰ āϏāĻŽā§ āϏāĻŽā§ā§āϰ āĻ āĻĒāĻā§ āĻāĻŽāĻžāϤ⧠āĻāĻŦāĻ āĻāĻĢāĻŋāĻļāĻŋā§ā§āύā§āϏāĻŋ āĻŦāĻžā§āĻžāϤ⧠Build Cache Optimization āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ āϏāĻ āĻŋāĻ āĻāĻĒāĻžā§ā§ āĻā§āϝāĻžāĻļ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āĻā§ā§āĻ āĻŽāĻŋāύāĻŋāĻā§āϰ āĻŦāĻŋāϞā§āĻĄ āĻĒā§āϰāϏā§āϏ āĻŽāĻžāϤā§āϰ āĻā§ā§āĻ āϏā§āĻā§āύā§āĻĄā§ āύāĻžāĻŽāĻŋā§ā§ āĻāύāĻž āϏāĻŽā§āĻāĻŦāĨ¤
ā§§. āĻĄāĻāĻžāϰ āϞā§āϝāĻŧāĻžāϰ āĻā§āϝāĻžāĻļāĻŋāĻ (Layer Caching) â
āĻĄāĻāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύāĻā§ (RUN, COPY, ADD) āĻāĻāĻāĻŋ āĻāϞāĻžāĻĻāĻž āϞā§ā§āĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āϏā§āĻ āĻāϰā§āĨ¤
- āϝāĻāύ āĻāĻĒāύāĻŋ āĻĒā§āύāϰāĻžā§ āĻŦāĻŋāϞā§āĻĄ āĻāϰā§āύ, āĻĄāĻāĻžāϰ āĻā§āĻ āĻāϰ⧠āĻĻā§āĻā§ āϏā§āĻ āϞā§ā§āĻžāϰ⧠āĻā§āύ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšā§ā§āĻā§ āĻāĻŋāύāĻžāĨ¤
- āϝāĻĻāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āύāĻž āĻšā§, āϤāĻŦā§ āĻĄāĻāĻžāϰ āĻāĻā§āϰ āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž āĻā§āϝāĻžāĻļ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
- āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ: āϝāĻĻāĻŋ āĻā§āύ⧠āϞā§ā§āĻžāϰā§āϰ āĻā§āϝāĻžāĻļ āĻāύāĻā§āϝāĻžāϞāĻŋāĻĄ (Invalid) āĻšā§, āϤāĻŦā§ āϤāĻžāϰ āĻĒāϰā§āϰ āϏāĻŦ āϞā§ā§āĻžāϰ āĻĒā§āύāϰāĻžā§ āĻŦāĻŋāϞā§āĻĄ āĻšāĻŦā§āĨ¤
⧍. āĻā§āϝāĻžāĻļ āĻŽāĻžāĻāύā§āĻāĻŋāĻ (Cache Mounting) â
BuildKit-āĻāϰ āĻāĻāĻāĻŋ āĻĒāĻžāĻā§āĻžāϰāĻĢā§āϞ āĻĢāĻŋāĻāĻžāϰ āĻšāϞ⧠type=cache āĻŽāĻžāĻāύā§āĻāĨ¤ āĻāĻāĻŋ āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āĻĒā§āϝāĻžāĻā§āĻ āĻŽā§āϝāĻžāύā§āĻāĻžāϰāĻā§āϞā§āϰ (pip, npm, apt) āĻāύā§āϝ āĻā§āĻŦ āĻāĻžāϰā§āϝāĻāϰāĨ¤
# Pip-āĻāϰ āĻāύā§āϝ āĻā§āϝāĻžāĻļ āĻŽāĻžāĻāύā§āĻ āĻāĻĻāĻžāĻšāϰāĻŖ
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txtāϏā§āĻŦāĻŋāϧāĻž: āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ requirements.txt-āĻ āĻāĻāĻāĻŋ āύāϤā§āύ āĻĒā§āϝāĻžāĻā§āĻ āϝā§āĻ āĻāϰā§āύ, āϤāĻŦā§ āĻĄāĻāĻžāϰ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏā§āĻ āĻĒā§āϝāĻžāĻā§āĻāĻāĻŋ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰāĻŦā§, āĻāĻā§āϰ āĻĒā§āϝāĻžāĻā§āĻāĻā§āϞ⧠āĻā§āϝāĻžāĻļ āĻĨā§āĻā§ āύāĻŋā§ā§ āύā§āĻŦā§āĨ¤
ā§Š. āĻŽāĻžāϞā§āĻāĻŋ-āϏā§āĻā§āĻ āĻā§āϝāĻžāĻļāĻŋāĻ (Multi-stage Caching) â
āĻŽāĻžāϞā§āĻāĻŋ-āϏā§āĻā§āĻ āĻŦāĻŋāϞā§āĻĄā§ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĢāĻžāĻāύāĻžāϞ āϏā§āĻā§āĻā§āϰ āĻāĻŽā§āĻ āĻā§āύāĻžāϰā§āĻ āĻšā§āĨ¤ āĻāĻŋāύā§āϤ⧠BuildKit āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āĻāĻĒāύāĻŋ āĻāύā§āĻāĻžāϰāĻŽāĻŋāĻĄāĻŋā§ā§āĻ āϏā§āĻā§āĻāĻā§āϞā§āĻā§āĻ āĻā§āϝāĻžāĻļ āĻšāĻŋāϏā§āĻŦā§ āϏā§āĻā§āϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
ā§Ē. āĻā§āϝāĻžāĻļ āĻāύāĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ (Cache Invalidation) â
āĻā§āϝāĻžāĻļ āĻāĻāύ āĻāĻžāĻ āĻāϰāĻŦā§ āύāĻž?
COPY . .āĻāϰāĻžāϰ āϏāĻŽā§ āϝāĻĻāĻŋ āĻā§āύ⧠āĻĢāĻžāĻāϞ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšā§āĨ¤- āĻā§āύā§
RUNāĻāĻŽāĻžāύā§āĻĄā§āϰ āĻāĻā§ āϝāĻĻāĻŋ āĻ āύā§āϝ āĻā§āύ⧠āϞā§ā§āĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšā§āĨ¤
āĻŦā§āϏā§āĻ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ: āĻĄāĻāĻžāϰāĻĢāĻžāĻāϞ⧠āϏāĻŦ āϏāĻŽā§ āϏā§āĻ āĻĢāĻžāĻāϞāĻā§āϞ⧠āĻāĻā§ āĻāĻĒāĻŋ āĻāϰā§āύ āϝāĻž āĻāύāĻāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻšā§ āύāĻž (āϝā§āĻŽāύ: package.json āĻŦāĻž go.mod)āĨ¤
# āĻāĻžāϞ⧠āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ
COPY package.json .
RUN npm install
COPY . .ā§Ģ. āϰāĻŋāĻŽā§āĻ āĻā§āϝāĻžāĻļ (Remote Cache) â
CI/CD āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ⧠āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻ āĻŦāĻŋāϞā§āĻĄā§āϰ āĻā§āϝāĻžāĻļ āĻ āύā§āϝ āĻŦāĻŋāϞā§āĻĄā§ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āύāĻž āĻāĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻāĻāĻŋ āύāϤā§āύ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āϤā§āϰāĻŋ āĻšā§āĨ¤ BuildKit-āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻāĻŽā§āĻ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋāϤ⧠(Docker Hub/GHCR) āĻā§āϝāĻžāĻļ āĻĒā§āĻļ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
docker buildx build --push \
--cache-from=user/app:cache \
--cache-to=user/app:cache,mode=max \
-t user/app:latest .āϏāĻžāϰāϏāĻāĻā§āώā§āĻĒ (Summary) â
āĻŦāĻŋāϞā§āĻĄ āĻā§āϝāĻžāĻļ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāύ āĻāĻĒāύāĻžāϰ āĻĄā§āĻāϞāĻĒāĻŽā§āύā§āĻ āϞāĻžāĻāĻĢāϏāĻžāĻāĻā§āϞāĻā§ āĻ āύā§āĻ āĻŦā§āĻļāĻŋ āĻĢāĻžāϏā§āĻ āĻāϰā§āĨ¤ āϞā§ā§āĻžāϰāĻŋāĻ āĻ āϰā§āĻĄāĻžāϰ āĻāĻŦāĻ BuildKit-āĻāϰ āĻā§āϝāĻžāĻļ āĻŽāĻžāĻāύā§āĻ āĻĢāĻŋāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϰāĻĢā§āĻļāύāĻžāϞ āĻĄāĻāĻžāϰ āĻāĻāĻāĻžāϰā§āϰ āĻāĻžāύāĻž āĻāĻāĻŋāϤāĨ¤
IMPORTANT
āϏāĻŦ āϏāĻŽā§ .dockerignore āĻĢāĻžāĻāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϝāĻžāϤ⧠āĻ
āĻĒā§āϰā§ā§āĻāύā§ā§ āĻĢāĻžāĻāϞ (āϝā§āĻŽāύ: node_modules, .git) āĻā§āϝāĻžāĻļ āĻāύāĻā§āϝāĻžāϞāĻŋāĻĄ āύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤