Sobes.tech
Junior

Maken alle commando's in Dockerfile lagen?

sobes.tech AI

Antwoord van AI

Ja. Elke instructie in een Dockerfile creëert een nieuwe laag in het beeld, behalve bijvoorbeeld ARG, LABEL, ENV. Deze instructies voegen alleen metadata of omgevingsvariabelen toe, zonder de inhoud van het bestandssysteem van de laag te beïnvloeden.

Belangrijke instructies die lagen creëren:

  • FROM: Basisafbeelding waarop de build begint.
  • RUN: Voer commando's uit in de container. Elke RUN instructie is een aparte laag. Het combineren van commando's in één RUN instructie met && kan het aantal lagen verminderen.
  • COPY: Kopieer bestanden en mappen van de host naar de container.
  • ADD: Vergelijkbaar met COPY, maar kan ook archieven uitpakken en bestanden downloaden via URL.
  • WORKDIR: Verander de werkdirectory voor volgende instructies.
  • VOLUME: Maak een mountpunt.

Voorbeeld van het demonstreren van lagen tijdens het bouwen:

FROM ubuntu:latest

RUN apt-get update && apt-get install -y nginx

COPY index.html /var/www/html/

WORKDIR /app

CMD ["nginx", "-g", "daemon off;"]

Bij het bouwen van deze Dockerfile vormt elke instructie FROM, RUN, COPY, WORKDIR, CMD (hoewel CMD en ENTRYPOINT technisch gezien geen laag in het bestandssysteem creëren, ze vormen een configuratielaag) zijn eigen laag, die door Docker wordt gecached. Verschillende typen instructies en hun invloed op de lagen:

Instructie Creëert een laag in het bestandssysteem? Invloed
FROM Ja Basisafbeelding
RUN Ja Uitvoeren van commando's
COPY Ja Bestanden kopiëren
ADD Ja Bestanden kopiëren (met extra functies)
WORKDIR Ja Wijzig directory
ENV Nee Stel omgevingsvariabelen in
ARG Nee Definieer bouwargumenten
LABEL Nee Voeg metadata toe
VOLUME Ja Definieer mountpunten
USER Ja Kies gebruiker
EXPOSE Nee Declareer poorten
ENTRYPOINT Nee Configureer uitvoerbaar bestand
CMD Nee Configureer commando voor container

Minder lagen maken images lichter en bouwen sneller dankzij betere caching en kleinere image grootte. Optimalisatie van Dockerfile bestaat vaak uit het minimaliseren van het aantal RUN instructies en het ordenen van commando's om optimaal gebruik te maken van de cache.