Docker og Kubernetes for udviklere · Lektion

Multi-stage builds til slanke produktionsimages

Få styr på multi-stage Dockerfiles, så De kan kompilere eller pakke Deres app i et build-stadie og kun kopiere artefakterne til et lille runtime-image.

Lektion 4 af 413 trin

Multi-stage builds til slanke produktionsimages er en gratis Docker og Kubernetes for udviklere-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Docker og Kubernetes for udviklere, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Docker og Kubernetes for udviklere-kurset indeholder 4 lektioner i alt.

Problemet med det store image

Et build i ét trin inkluderer ofte compilere, udviklingsafhængigheder og kildekode i produktionen. Resultatet er et stort image, der tager længere tid at hente og har en større angrebsflade.

Hvad er et build i flere trin

Et build i flere trin bruger flere FROM-sætninger i én Dockerfile. Tidligere trin bygger artefakter, mens et afsluttende, slankt trin kun kopierer det, der er nødvendigt for at køre.

Et Go-eksempel med flere build-trin

Kompilér i et Go-image, og udgiv derefter et lille afsluttende image, der kun indeholder den binære fil.

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app .

FROM alpine:3.20
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Kopiering fra et navngivet trin

Den afgørende linje er COPY --from=build. Den henter den kompilerede binære app-fil fra build-trinnet og lader Go-værktøjskæden blive tilbage.

Et Node.js-eksempel med flere build-trin

Installér og byg med udviklingsafhængigheder, og kopiér derefter kun outputtet til produktion.

FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package*.json ./
RUN npm ci --omit=dev
CMD ["node", "dist/index.js"]

Valg af et slankt base-image

Afsluttende trin bør bruge minimale base-images som alpine, -slim eller distroless. Mindre base-images betyder færre pakker og færre sårbarheder.

Distroless-images

Googles distroless-images indeholder kun din app og dens runtime – ingen shell eller pakkehåndtering. De er meget små og svære at udnytte interaktivt.

FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Målretning mod et bestemt trin

Du kan kun bygge frem til et navngivet trin med --target, hvilket er nyttigt til at køre tests i CI.

docker build --target build -t myapp:test .

Caching af afhængigheder

Kopiér afhængighedsmanifestet før resten af kildekoden. Derefter caches installationen af afhængigheder, og den køres kun igen, når manifestet ændres.

COPY package*.json ./
RUN npm ci
COPY . .

Måling af gevinsten

Sammenlign størrelserne før og efter. Builds i flere trin reducerer ofte images fra hundredvis af MB til snesevis af MB.

docker images myapp

Kombination med .dockerignore

Tilføj en .dockerignore, så build-konteksten udelader node_modules, .git og hemmeligheder. Det gør builds hurtigere og forhindrer, at filer lækkes ind i images.

node_modules
.git
*.env

Hurtig test

Test, hvad du har lært.

Opsummering

Du har lært at opdele Dockerfiles i build- og runtime-trin, kun kopiere artefakter med --from, vælge slanke eller distroless-base-images, målrette trin og kombinere dette med .dockerignore for slanke produktions-images.

Gratis at komme i gang

Lær Docker og Kubernetes for udviklere med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Multi-stage builds til slanke produktionsimages” gratis?

Ja — hele teksten til “Multi-stage builds til slanke produktionsimages” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Docker og Kubernetes for udviklere-kurset, skal du opgradere til CoddyKit PRO. Docker og Kubernetes for udviklere-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Multi-stage builds til slanke produktionsimages”?

Få styr på multi-stage Dockerfiles, så De kan kompilere eller pakke Deres app i et build-stadie og kun kopiere artefakterne til et lille runtime-image. Du øver dig i Docker og Kubernetes for udviklere med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Docker og Kubernetes for udviklere?

Der kræves ingen tidligere erfaring. Docker og Kubernetes for udviklere på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Multi-stage builds til slanke produktionsimages”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Docker og Kubernetes for udviklere-lektion?

Ja. Alle Docker og Kubernetes for udviklere-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Containerisering af en webapplikation
  2. Optimering af Docker-images
  3. Best practices for sikkerhed og produktion
  4. Multi-stage builds til slanke produktionsimages
← Tilbage til Docker og Kubernetes for udviklere