Peta dunia

 

EN: Read in English

Dunia D2: Resepi

Kek lapis: layer dan cache

Anda akan belajar: kenapa susunan baris resepi buat build jadi laju atau lambat.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Anda tukar satu perkataan dalam server.js. Build jalankan npm ci semula, dan anda tunggu dua minit. Kenapa?

Pilih satu jawapan.

Tengok

Build kedua tukar style.css. WORKDIR dan COPY index.html tulis CACHED. COPY style.css dibakar semula. Transkrip Docker: $ docker build -t diary:1.0 . [+] Building 0.1s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 135B 0.0s => [internal] load metadata for docker.io/library/nginx:1.30-alpine 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 50B 0.0s => [1/4] FROM docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => => resolve docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => [2/4] WORKDIR /usr/share/nginx/html 0.0s => [internal] load build context 0.0s => => transferring context: 208B 0.0s => [3/4] COPY index.html . 0.0s => [4/4] COPY style.css . 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => exporting manifest sha256:415f10199345cc337dd68e80758f75941ce3e3e49 0.0s => => exporting config sha256:ee01a8155259f6e2486f1965e07648f6d9bd9b754d3 0.0s => => exporting attestation manifest sha256:924620499159e7dfcde766051b335 0.0s => => exporting manifest list sha256:a624056884c4c0ffc6aa2f49b7f7a2214640 0.0s => => naming to docker.io/library/diary:1.0 0.0s => => unpacking to docker.io/library/diary:1.0 0.0s $ echo "body { color: hotpink; }" > style.css $ docker build -t diary:1.1 . [+] Building 0.1s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 135B 0.0s => [internal] load metadata for docker.io/library/nginx:1.30-alpine 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 50B 0.0s => [1/4] FROM docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => => resolve docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => CACHED [2/4] WORKDIR /usr/share/nginx/html 0.0s => [internal] load build context 0.0s => => transferring context: 211B 0.0s => CACHED [3/4] COPY index.html . 0.0s => [4/4] COPY style.css . 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => exporting manifest sha256:88ebfc2dd16e6de6ca7dec45b7030cab18e4d0d5f 0.0s => => exporting config sha256:f932de8330ca850535196b0c948718597b1ef1368c2 0.0s => => exporting attestation manifest sha256:47f2c7f332b856661a324838d3251 0.0s => => exporting manifest list sha256:403fa10c72327feadc6983d91f180fc01a0d 0.0s => => naming to docker.io/library/diary:1.1 0.0s => => unpacking to docker.io/library/diary:1.1 0.0s

Laptop anda~/diary

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • nginx:1.30-alpine8 layer · 93.5MB

0 container (0 berjalan), 1 image, 0 loker.

Setiap baris resepi bakar satu layer (lapisan) (layer): Satu lapisan image; tukar satu, lapisan di atasnya dibuat semula., macam kek lapis. Docker simpan layer lama. Tukar style.css: hanya layernya dan layer di atasnya dibakar semula. Yang lain tulis CACHED.

Cuba

Resepi ini bakar npm ci semula selepas setiap perubahan kod. Alihkan baris supaya ia kekal CACHED bila server.js berubah.

Setiap baris resepi tambah satu lapisan kek. Susun baris dengan betul, kemudian bina.

Dockerfile (resepi)

  1. FROM node:24-alpine
  2. WORKDIR /app
  3. COPY . .
  4. COPY package.json package-lock.json ./
  5. RUN npm ci --omit=dev
  6. CMD ["node", "server.js"]

Anda sudah bina sekali. Lepas ini, anda ubah server.js.

Kek (image anda)

  1. CMD ["node", "server.js"]0B
  2. RUN npm ci --omit=dev12.8MB
  3. COPY package.json package-lock.json ./53.2kB
  4. COPY . .36.9kB
  5. WORKDIR /app8.19kB
  6. FROM node:24-alpine181MB

Teka

Sekarang susunannya bagus. Anda tambah satu pakej, jadi package.json berubah. Apa yang dibakar semula?

Pilih satu jawapan.

Cuba

Resepi ini sudah tersusun. Layernya ada dalam cache binaan (build cache): Layer yang disimpan dari bakar lepas. Langkah yang tak berubah diguna semula.. Tukar kod, bina api:1.1, dan kira baris CACHED.

Laptop anda~/api

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • api:1.08 layer · 244MB
  • node:24-alpine4 layer · 244MB

0 container (0 berjalan), 2 image, 0 loker.

Semak

Tabiat cache yang bagus? Leret ke kanan untuk ya, ke kiri untuk “perlu dibaiki”.

Leret ke kanan untuk bagus, ke kiri untuk perlu baiki. Atau guna butang.

1 / 4

Salin fail pakej dan pasang dulu, sebelum salin kod

Salin fail pakej dan pasang dulu, sebelum salin kod

Anda berjaya!

Kini anda boleh susun resepi supaya build semula kekal laju.

Nak tahu lebih (pilihan)

docker history api:1.1 senaraikan layer, yang terbaru di atas, dengan saiznya. Baris seperti ENV dan CMD tunjuk 0B: nota, bukan layer. Padam fail dalam layer kemudian cuma sembunyikannya. Image tak jadi kecil.

Misi sebenar

  1. docker history api:1.1

0 daripada 3 langkah siap · Tanda anda disimpan.