Небольшие нюансы Dockerfile

Сначала чуть-чуть базовой информации: Каждая команда в докерфайле (RUN, COPY, ADD, etc) - это отдельный слой поверх предыдущего. Слои неимзеняемые. То есть, сли вы во второй команде меняете те же файлы что изменялись в первой - вы получаете новый слой с измененной копией тех файлов.

В частности поэтому можно встретить команды вида

RUN apt update \
  && apt install bla-bla \
  && rm -rf /var/lib/apt/lists/* \
  && apt-get purge --auto-remove -y bla \
  && rm -rf /src/*.deb

Это сделано для того чтобы в одном слое добавить нужные файлы и сразу в нем же удалить ненужные.

Отсюда следует не совсем очевидное. В наборе команд:

COPY ./ /app
RUN chown -R blabla /app

мы получаем два почти одинаковых слоя с файлами /app. То есть, увеличение размера образа. Большой размер образа увеличивает время старта приложения, и стоимость его хранения.