Docker кэширует «слои» для повторного их сохранения.
RUN
- это одна из команд Dockerfile, которая генерирует слои, поэтому Docker Движок будет кэшировать этот слой и, следовательно, не RUN
команда, если она существует и не изменилась.
Я скопировал ваш Dockerfile и собрал его дважды. Вот второй прогон:
docker build --rm --file=./Dockerfile --tag=59886068:latest .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM php:7-fpm
---> fa37bd6db22a
Step 2/3 : RUN apt-get update && apt-get install -y libmcrypt-dev mariadb-client libmcrypt4 && docker-php-ext-install pdo_mysql && kill -USR2 1
---> Using cache
---> c76aaadf8680
Step 3/3 : WORKDIR /var/www
---> Using cache
---> fc0287d8edb2
Successfully built fc0287d8edb2
Successfully tagged 59886068:latest
NB Шаг # 2 равен Using cache
во 2-м билде для (в моем случае) c76aaadf8680
.
Вы можете увидеть это, используя:
docker image history 59886068:latest
IMAGE CREATED CREATED BY
fc0287d8edb2 21 minutes ago /bin/sh -c #(nop) WORKDIR /var/www
c76aaadf8680 21 minutes ago /bin/sh -c apt-get update && apt-get install…
fa37bd6db22a 3 weeks ago /bin/sh -c #(nop) CMD ["php-fpm"]
Или:
docker image ls --all | grep c76aaadf8680
<none> <none> c76aaadf8680 21 minutes ago 477MB
NB Ваш идентификатор изображения будет другим.
Вы можете принудительно docker
и docker-compose
для восстановления изображений без кеша:
docker build --no-cache ...
docker-compose build --no-cache ...