Minden parancs a Dockerfile-ban rétegeket hoz létre?
sobes.tech MI
Válasz az MI-től
Igen. Minden utasítás a Dockerfile-ban új réteget hoz létre az image-ben, kivéve például az ARG, LABEL, ENV. Ezek az utasítások csak metaadatokat vagy környezeti változókat adnak hozzá, anélkül, hogy befolyásolnák a réteg fájlrendszerének tartalmát.
Fontos utasítások, amelyek rétegeket hoznak létre:
- FROM: Alap kép, amelyből az építkezés indul.
- RUN: Parancsok végrehajtása a konténerben. Minden
RUNutasítás egy külön réteg. A parancsok egyesítésével egyRUN-ban a&&segítségével csökkenthető a rétegek száma. - COPY: Fájlok és könyvtárak másolása a gazdagépről a konténerbe.
- ADD: Hasonló a COPY-hoz, de képes archívumokat kicsomagolni és fájlokat letölteni URL-ről.
- WORKDIR: A munkakönyvtár módosítása a következő utasításokhoz.
- VOLUME: Csatolópont létrehozása.
Példa a rétegek bemutatására a build során:
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;"]
A Dockerfile építése során minden FROM, RUN, COPY, WORKDIR, CMD (bár a CMD és az ENTRYPOINT technikailag nem hoznak létre réteget a fájlrendszerben, de konfigurációs réteget hoznak létre) saját réteget képez, amit a Docker cache-el. A különböző típusú utasítások és hatásuk a rétegekre:
| Utasítás | Létrehoz-e réteget a fájlrendszerben? | Hatás |
|---|---|---|
FROM |
Igen | Alap kép |
RUN |
Igen | Parancsok végrehajtása |
COPY |
Igen | Fájlok másolása |
ADD |
Igen | Fájlok másolása (kiegészítő funkciókkal) |
WORKDIR |
Igen | Könyvtár módosítása |
ENV |
Nem | Környezeti változók beállítása |
ARG |
Nem | Építési argumentumok meghatározása |
LABEL |
Nem | Metaadatok hozzáadása |
VOLUME |
Igen | Csatolópontok meghatározása |
USER |
Igen | Felhasználó kiválasztása |
EXPOSE |
Nem | Portok deklarálása |
ENTRYPOINT |
Nem | Futtatható fájl konfigurálása |
CMD |
Nem | Parancs konfigurálása a konténerhez |
Kevesebb réteg könnyebb képeket és gyorsabb buildet eredményez, jobb cache-elés és kisebb képméret mellett. A Dockerfile optimalizálása gyakran a RUN utasítások számának minimalizálására és a parancsok sorrendjének megtervezésére összpontosít, hogy a cache-t maximálisan kihasználja.