Grunnleggende Docker og DevOps · leksjon

Utnytte bufring av bygg

Optimaliser byggetiden i Docker ved å forstå og bruke Docker-byggebufferen effektivt.

Leksjon 2 av 411 trinn

Utnytte bufring av bygg er en gratis leksjon i Grunnleggende Docker og DevOps på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende Docker og DevOps, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende Docker og DevOps inneholder totalt 4 leksjoner.

Bygg raskere med hurtigbuffer

Det kan ta tid å bygge Docker-images, særlig for komplekse applikasjoner. Docker har en smart hurtigbuffer for bygging som kan gjøre prosessen betydelig raskere!

Den fungerer ved å gjenbruke lag fra tidligere bygg, slik at Docker ikke må bygge alt fra grunnen av hver gang.

Utnytte bufring av bygg — illustrasjon 1

Bygging lag for lag

Når De bygger et Docker-image ved hjelp av en Dockerfile, kjører Docker hver instruksjon linje for linje.

  • Hver instruksjon, for eksempel FROM, RUN eller COPY, oppretter et nytt «lag» i imaget.
  • Disse lagene stables oppå hverandre for å danne det endelige imaget.

Slik sjekker Docker hurtigbufferet

Før en instruksjon kjøres, sjekker Docker om det nøyaktige laget allerede er bygget tidligere. Den sammenligner:

  • Selve instruksjonen (for eksempel RUN apt update).
  • «Konteksten» for bestemte instruksjoner (for eksempel filene som blir COPY'd).

Hvis et samsvarende lag blir funnet, gjenbruker Docker det fra hurtigbufferet i stedet for å kjøre instruksjonen på nytt.

Ugyldiggjøring av hurtigbufferet

Hurtigbufferet er nyttig, men det brukes ikke alltid. Hvis Docker oppdager en endring i en instruksjon eller konteksten til den, blir hurtigbufferet for dette laget og alle påfølgende lag ugyldig.

Det betyr at Docker bygger på nytt fra dette punktet og videre, og ignorerer eventuelle hurtigbufrede lag under det.

Smart rekkefølge på instruksjonene

For å få flest mulig treff i hurtigbufferet bør De ordne instruksjonene i Dockerfile fra de som sannsynligvis endres minst, til de som sannsynligvis endres mest.

  • Stabile avhengigheter først: Installer systempakker eller applikasjonsavhengigheter som sjelden endres.
  • Applikasjonskode til slutt: Kopier kildekoden til applikasjonen så sent som mulig, siden den endres ofte.

Rekkefølge for treff i hurtigbufferet

La oss se på et eksempel. Ved å plassere kommandoen RUN pip install (som vanligvis endres sjeldnere) før COPY . . (som endres ved hver kodeoppdatering), kan Docker gjenbruke avhengighetslaget.

Forestill Dem at requirements.txt inneholder flask og gunicorn, og at app.py er hovedapplikasjonen.

Dockerfile:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
CMD ["python", "app.py"]

Hvis bare app.py endres, bygger Docker bare om de siste COPY- og CMD-lagene, noe som sparer tid!

Selektiv kopiering med .dockerignore

Når De bruker COPY . ., sjekker Docker alle filer i byggkonteksten for endringer. Selv små, irrelevante filer, som .git-mapper eller lokale testdata, kan ugyldiggjøre hurtigbufferet.

Bruk en .dockerignore-fil til å utelate unødvendige filer og mapper fra byggkonteksten. Da hindrer De at de utløser ugyldiggjøring av hurtigbufferet.

.dockerignore i praksis

Plasser en fil med navnet .dockerignore i roten av byggkonteksten, ved siden av Dockerfile.

Eksempel på .dockerignore:

.git
.venv
__pycache__
*.log
node_modules

Nå ignorerer Docker disse filene når De bruker COPY . ., noe som gir mer pålitelige treff i hurtigbufferet!

Når hurtigbufferet bør hoppes over

Noen ganger ønsker De å sikre at alt bygges på nytt fra grunnen av, uten å bruke hurtigbufferet. Dette kan være nyttig ved feilsøking eller når De vil være sikker på å ha de aller nyeste versjonene av avhengighetene.

De kan tvinge Docker til å bygge på nytt uten å bruke hurtigbufferet ved å legge til flagget --no-cache i byggkommandoen:

docker build --no-cache -t my-app:latest .

Kontroll av hurtigbufferoptimalisering

De bygger et Docker-image for en Node.js-applikasjon. Dockerfile ser for øyeblikket slik ut:

FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

Hvilken endring vil optimalisere denne Dockerfile-filen best for hurtigbufret bygging?

Oppsummering: Få kontroll på hurtigbufferet!

Godt jobbet! De har lært hvordan De kan utnytte Docker-hurtigbufferet for å bygge images raskere.

  • Docker bygger images lag for lag og gjenbruker hurtigbufrede lag når det er mulig.
  • Endringer i en instruksjon eller konteksten til den ugyldiggjør hurtigbufferet fra dette punktet.
  • Optimaliser ved å ordne instruksjonene fra de som sannsynligvis endres minst, til de som sannsynligvis endres mest.
  • Bruk .dockerignore til å utelate irrelevante filer fra byggkonteksten.
  • Bruk --no-cache for å tvinge frem et nytt bygg ved behov.

Effektiv bruk av hurtigbufferet gir raskere utviklingssykluser og mer smidige utrullinger!

Gratis å komme i gang

Lær deg Grunnleggende Docker og DevOps med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Utnytte bufring av bygg» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende Docker og DevOps, inkludert «Utnytte bufring av bygg», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende Docker og DevOps inneholder totalt 4 leksjoner.

Hva lærer jeg i «Utnytte bufring av bygg»?

Optimaliser byggetiden i Docker ved å forstå og bruke Docker-byggebufferen effektivt. Du øver på Grunnleggende Docker og DevOps med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende Docker og DevOps?

Ingen tidligere erfaring er nødvendig. Grunnleggende Docker og DevOps på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Utnytte bufring av bygg»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende Docker og DevOps-leksjonen?

Ja. Alle Grunnleggende Docker og DevOps-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Bygg med flere trinn for bedre effektivitet
  2. Utnytte bufring av bygg
  3. Beste praksis for sikkerhet i Dockerfiles
  4. Minimere imagestørrelsen med Slim- og Distroless-baser
← Tilbake til Grunnleggende Docker og DevOps