Далее приведен результат сборки вашего файла Dockerfile на новой машине:
# docker build -t test:1 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM node:8.6-alpine AS build1
8.6-alpine: Pulling from library/node
88286f41530e: Pull complete
d0e8a23136b3: Pull complete
5ad5b12a980e: Pull complete
Digest: sha256:60cd58a7a2bd9fec161f53f8886e451f92db06b91f4f72d9188eeea040d195eb
Status: Downloaded newer image for node:8.6-alpine
---> b7e15c83cdaf
Step 2/2 : FROM node:8.5-alpine AS build2
8.5-alpine: Pulling from library/node
88286f41530e: Already exists
aa0be12c5610: Pull complete
719d346e6de2: Pull complete
Digest: sha256:945cf56668d3e58a3b045291564963ccde29a68da9c1483e19d8a0b06749db06
Status: Downloaded newer image for node:8.5-alpine
---> 7a779c246a41
Successfully built 7a779c246a41
Successfully tagged test:1
Из вывода вы можете видеть, что id изображения 88286f41530e
был повторно использован как Already exists
.
Иdocker images
output:
REPOSITORY TAG IMAGE ID CREATED SIZE
node 8.6-alpine b7e15c83cdaf 13 months ago 67.2MB
node 8.5-alpine 7a779c246a41 14 months ago 67MB
Итак, базовый образ первой стадии в мультистройке также сохраняется в кеше.
И из этого post :
Начиная с Docker v1.10, изображения и слои больше не являются синонимами.Вместо этого изображение напрямую ссылается на один или несколько слоев, которые в конечном итоге вносят вклад в файловую систему производного контейнера.
Таким образом, при повторном использовании некоторого изображения слои, несомненно, будут использоваться повторно.
Конечно,это зависит от базовых образов, которые вы использовали в multibuild, им нужно что-то для повторного использования.
В любом случае, я думаю, multibuild просто добавляет некоторые хитрости по сравнению с традиционной сборкой, но механизм повторного использования слоев остается тем же.