Grunnleggende Docker og DevOps · leksjon

Imagelag og optimalisering

Oppdag hvordan Docker-images bygges opp av lag, og bruk teknikker for å optimalisere image-størrelse og byggetider.

Leksjon 3 av 411 trinn

Imagelag og optimalisering er en gratis leksjon i Grunnleggende Docker og DevOps på CoddyKit. Dette er leksjon 3 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.

Imagelag: Byggeklosser

Docker-imager er ikke én eneste stor fil. I stedet bygges de opp av en serie skrivebeskyttede lag. Tenk på disse lagene som transparenter som er stablet oppå hverandre.

Hvert lag representerer en endring i imaget, noe som gjør imager effektive og fleksible. Denne lagdelingen er grunnleggende for hvordan Docker fungerer.

Imagelag og optimalisering — illustrasjon 1

Dockerfile-instruksjoner og lag

Når De skriver en Dockerfile, oppretter nesten hver instruksjon et nytt lag oppå det forrige. Instruksjoner som FROM, RUN, COPY og ADD bidrar alle til å opprette nye lag.

Docker kjører disse instruksjonene sekvensielt og bygger hvert nye lag basert på tilstanden til det forrige.

Undersøke imagehistorikken

De kan se lagene som utgjør et image, ved å bruke kommandoen docker history. Denne kommandoen viser hver instruksjon, størrelsen og når den ble opprettet, slik at De kan forstå hvordan et image har vokst.

Dette er et effektivt verktøy for feilsøking av problemer med imagestørrelse.

docker history my-image:latest

Kraften i lagbufring

Docker bruker en smart byggebuffer. Hvis en instruksjon i Dockerfile-filen og konteksten til den (for eksempel filer som kopieres) ikke er endret siden forrige bygging, gjenbruker Docker det eksisterende laget.

Dette gjenbruket gjør senere bygginger betydelig raskere, siden Docker ikke trenger å kjøre uendrede trinn på nytt.

Optimalisering 1: Smart rekkefølge på lag

Rekkefølgen på instruksjonene i Dockerfile-filen er avgjørende for effektiv bruk av bufferen. Plasser instruksjoner som sjelden endres (for eksempel installasjon av systemavhengigheter), øverst.

Instruksjoner som endres ofte (for eksempel kopiering av applikasjonskoden), bør plasseres lenger ned. På denne måten kan Docker gjenbruke bufrede lag for stabile avhengigheter når bare koden endres.

Eksempel: Optimalisere lagrekkefølgen

Sammenlign disse to Dockerfile-utdragene. Den gode rekkefølgen plasserer stabile avhengigheter først, slik at Docker kan bufre dem og bare bygge lagene for applikasjonskode som endres, på nytt.

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]

Optimalisering 2: Slå sammen RUN-kommandoer

Hver RUN-kommando oppretter vanligvis et nytt lag. De kan redusere antallet lag og ofte den endelige imagestørrelsen ved å slå sammen flere kommandoer i én RUN-instruksjon.

Bruk operatoren && \ til å kjede kommandoer sammen, slik at de blir en del av ett atomisk lag.

Eksempel: Kjede RUN-kommandoer

I stedet for flere RUN-kommandoer kan De kjede dem sammen med && \. Dette oppretter ett mer effektivt lag for alle disse operasjonene.

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install -y curl && \
    rm -rf /var/lib/apt/lists/*
CMD ["bash"]

Optimalisering 3: Rydde opp i filer

Rydd alltid opp filer som bare trengs under byggeprosessen. Pakkehåndteringsbuffere (som apt-get clean) eller midlertidige byggeartefakter kan for eksempel øke størrelsen på imagelagene betydelig.

Hvis De rydder dem opp i samme RUN-kommando som opprettet dem, sikrer De at de ikke blir værende i et tidligere lag.

Rask kontroll: Optimalisering av imager

Se på følgende utdrag fra en Dockerfile:

FROM alpine:latest
COPY . /app
RUN apk add --no-cache git
RUN apk add --no-cache make
CMD ["sh"]

Hvilken av følgende endringer vil optimalisere denne Dockerfile-filen best for å oppnå en mindre imagestørrelse og potensielt raskere ombygginger?

Oppsummering: Slankere og raskere imager

De har lært at Docker-imager bygges i lag, og at hver instruksjon ofte oppretter et nytt lag. Å forstå dette er nøkkelen til optimalisering!

  • Plasser instruksjonene med omtanke for å få flest mulig treff i byggebufferen.
  • Slå sammen flere RUN-kommandoer til én for å redusere antallet lag.
  • Rydd opp midlertidige filer i de tilhørende RUN-kommandoene for å holde lagene små.

Disse teknikkene bidrar til å lage mindre Docker-imager som bygges raskere, noe som er viktig for effektive 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 «Imagelag og optimalisering» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende Docker og DevOps, inkludert «Imagelag og optimalisering», 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 «Imagelag og optimalisering»?

Oppdag hvordan Docker-images bygges opp av lag, og bruk teknikker for å optimalisere image-størrelse og byggetider. 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 3 av 4.

Hvor lang tid tar leksjonen «Imagelag og optimalisering»?

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. Forstå Dockerfiles
  2. Opprette egendefinerte Docker-images
  3. Imagelag og optimalisering
  4. Flerstegsbygg og mindre images
← Tilbake til Grunnleggende Docker og DevOps