multi-stage - он нужен чтобы сделать образы меньше.
И там упоминается что с каждой командой количество слоев при сборке образа растет, что увеличивает размер.
Вопрос: что же такое эти слои? И надо ли мне о них думать?
Статья: https://docs.docker.com/develop/develop-images/multistage-build/
весь докер построен на прослойках - сначала берется базовый образ, высчитывается хеш-сумма, далее вносятся изменения, снова расчет хеша цель такой реализации - уменьшить затраты на сборку и сэкономить место благодаря кэшированию образов
слои это набор файлов запакованных в .tag.gz формате каждая команда порождает запись + удаление + изменение старых файлов docker сделан на базе copy-on-write файловой системы aufs у каждого слоя может быть родительский слой соответственно, каждая команда порождает слой но не каждый слой обязан входить в финальный image поэтому multi-stage нужен для того чтобы например те слои которы отвечают на build не входили в финальный набор слоев который протегирован в image
о, более правильно расписал, спасибо
Осталось только понять куда эти слои попадают Обычный докерфайл делает к примеру так: Building s3 Step 1/11 : FROM debian:latest ---> 6d6b00c22231 Step 2/11 : ENV VERSION="1.6.6" ---> Using cache ---> 0278015a83fb Step 3/11 : WORKDIR /opt ---> Using cache ---> 093970566114 Step 4/11 : RUN apt-get install wget unzip ---> Running in d047ef238a89 Выходит 11 слоев? И все эти 11 будут в образе или будут кэшем лежать просто в системе с докером?
они все будут в образе у них у каждого есть уникальный идентификатор если у вас не будет второго FROM ниже Using cache значит что docker определил что "команда ничего не меняет" и не стал пересобирать слой
Обсуждают сегодня