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 инструкција и редослед команда за максимално коришћење кеша.