Sobes.tech
Junior

Vytvárajú všetky príkazy v Dockerfile vrstvy?

sobes.tech AI

Odpoveď od AI

Áno. Každý príkaz v Dockerfile vytvára nový vrstvy v obraze, okrem napríklad ARG, LABEL, ENV. Tieto príkazy iba pridávajú metadáta alebo premenné prostredia, neovplyvňujúc obsah súborového systému vrstvy.

Dôležité príkazy, ktoré vytvárajú vrstvy:

  • FROM: Základný obraz, od ktorého sa začína zostavovanie.
  • RUN: Spustenie príkazov v kontajneri. Každý RUN príkaz je samostatná vrstva. Kombinácia príkazov v jednom RUN s && znižuje počet vrstiev.
  • COPY: Kopírovanie súborov a adresárov zo hostiteľa do kontajnera.
  • ADD: Podobne ako COPY, ale tiež môže extrahovať archívy a sťahovať súbory cez URL.
  • WORKDIR: Zmena pracovného adresára pre nasledujúce príkazy.
  • VOLUME: Vytvorenie bodu pripojenia.

Príklad demonštrácie vrstiev pri zostavovaní:

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;"]

Pri zostavovaní tohto Dockerfile každý z príkazov FROM, RUN, COPY, WORKDIR, CMD (hoci CMD a ENTRYPOINT technicky nevytvárajú vrstvu v súborovom systéme, vytvárajú vrstvu konfigurácie) tvorí svoju vrstvu, ktorú cacheuje Docker. Rôzne typy príkazov a ich vplyv na vrstvy:

Príkaz Vytvára vrstvu súborového systému? Vplyv
FROM Áno Základný obraz
RUN Áno Spustenie príkazov
COPY Áno Kopírovanie súborov
ADD Áno Kopírovanie súborov (s ďalšími možnosťami)
WORKDIR Áno Zmena adresára
ENV Nie Nastavenie premenných prostredia
ARG Nie Definovanie argumentov zostavovania
LABEL Nie Pridanie metadát
VOLUME Áno Definovanie bodov pripojenia
USER Áno Výber používateľa
EXPOSE Nie Oznámenie portov
ENTRYPOINT Nie Nastavenie spúšťacieho súboru
CMD Nie Nastavenie príkazu pre kontajner

Menej vrstiev robí obrazy ľahšími a rýchlejšími na zostavenie vďaka lepšiemu cache a zníženiu veľkosti obrazu. Optimalizácia Dockerfile sa často znižuje na minimalizáciu počtu RUN príkazov a poradia príkazov pre maximálne využitie cache.