Sobes.tech
Junior

Da li sve komande u Dockerfile kreiraju slojeve?

sobes.tech АИ

Одговор од АИ

Да. Свако упутство у Dockerfile-у ствара нов слој у слици, осим на пример ARG, LABEL, ENV. Ове инструкције само додају метаподатке или променљиве окружења, не утичући на садржај фајл системског слоја.

Важне инструкције које стварају слојеве:

  • FROM: Основни образац, од којег почиње изградња.
  • RUN: Извршавање команда у контејнеру. Свако RUN упутство је одвојени слој. Комбинација команда у један RUN са && смањује број слојева.
  • COPY: Копирање фајлова и директоријума са хоста у контејнер.
  • ADD: Слично COPY, али такође може издвајати архиве и преузимати фајлове преко URL-а.
  • WORKDIR: Промена радне директорије за следећа упутства.
  • VOLUME: Креирање тачке монтирања.

Пример демонстрације слојева приликом изградње:

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

При изградњи овог Dockerfile-а свака од инструкција FROM, RUN, COPY, WORKDIR, CMD (иако CMD и ENTRYPOINT технички не стварају слој у фајл систему, они стварају слој конфигурације) формира свој слој који Docker кешира. Различите типове инструкција и њихов утицај на слојеве:

Инструкција Ствара слој у фајл систему? Утицај
FROM Да Основни образац
RUN Да Извршавање команда
COPY Да Копирање фајлова
ADD Да Копирање фајлова (са додатним могућностима)
WORKDIR Да Промена директоријума
ENV Не Постављање променљивих окружења
ARG Не Дефинисање аргумената за изградњу
LABEL Не Додавање метаподатака
VOLUME Да Дефинисање тачака монтирања
USER Да Избор корисника
EXPOSE Не Објављивање портова
ENTRYPOINT Не Подешавање извршног фајла
CMD Не Подешавање команде за контејнер

Мање слојева чини слике лакшим и бржим за изградњу захваљујући бољем кеширању и смањењу величине слике. Оптимизација Dockerfile-а често се своди на минимизирање броја RUN инструкција и редослед команда за максимално коришћење кеша.