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
RUNinstructie is een aparte laag. Het combineren van commando's in éénRUNinstructie 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.