Understanding Docker Layer Caching
Docker qatlam keshlashni tushunish
Piyozni tasavvur qiling: u bir nechta qatlamdan iborat, har biri avvalgisining ustiga o'ralgan. Docker image ham xuddi shunday — bir nechta qatlam (layer)dan tashkil topgan, va Dockerfile'dagi har bir buyruq (FROM, COPY, RUN...) yangi bitta qatlam qo'shadi.
Bu tuzilishning ajoyib foydasi bor: agar siz Dockerfile'ni qayta qursangiz-u, faqat oxirgi qatlam(lar) o'zgargan bo'lsa, Docker o'zgarmagan qatlamlarni qaytadan qurmaydi — ularni keshdan (avval qurilgan holida) to'g'ridan-to'g'ri oladi. Bu — kitobning faqat o'zgargan sahifalarini qayta chop etib, qolganlarini eski nusxadan olishga o'xshaydi.
FROM golang:1.22
WORKDIR /app
# YOMON tartib: kod har o'zgarganda BARCHA qatlamlar qayta quriladi
COPY . .
RUN go mod download
RUN go build -o server .FROM golang:1.22
WORKDIR /app
# YAXSHI tartib: go.mod kamdan-kam o'zgaradi, shuning uchun uni ALOHIDA nusxalab,
# bog'liqliklarni oldindan yuklab olamiz — bu qatlam deyarli har doim KESHDAN olinadi
COPY go.mod go.sum ./
RUN go mod download
# Kod tez-tez o'zgaradi — shuning uchun uni OXIRIGA qo'yamiz
COPY . .
RUN go build -o server .Birinchi (yomon) variantda COPY . . — BARCHA fayllarni (hatto bitta qatorli o'zgarish bo'lsa ham) nusxalaydi, bu esa undan keyingi go mod download qatlamini ham "eskirgan" deb hisoblashga majbur qiladi — natijada har safar barcha bog'liqliklar qaytadan yuklab olinadi, garchi go.mod umuman o'zgarmagan bo'lsa ham! Ikkinchi (yaxshi) variantda esa avval faqat go.mod/go.sum (kamdan-kam o'zgaradigan fayllar) nusxalanadi va bog'liqliklar yuklanadi — bu qatlam deyarli har doim keshdan olinadi. Faqat shundan keyin tez-tez o'zgaradigan haqiqiy kod nusxalanadi.
Bu naqsh — "tez-tez o'zgaradigan narsalarni Dockerfile'ning oxiriga, kamdan-kam o'zgaradiganlarni boshiga qo'ying" — image qurish vaqtini soniyalargacha qisqartirishi mumkin, ayniqsa katta loyihalarda kunlik ravishda o'nlab marta qurilganda.
Key Takeaway
Key Takeaway:
Docker image bir nechta qatlamdan iborat va o'zgarmagan qatlamlarni keshdan oladi; kamdan-kam o'zgaradigan buyruqlarni (bog'liqliklarni o'rnatish) Dockerfile boshiga, tez-tez o'zgaradiganlarni (kodning o'zi) oxiriga joylashtirish qurish vaqtini sezilarli qisqartiradi.
NEXT UP
Build Your First Dockerfile