Docker BuildKit
Docker version 18.09.8, build 00dd43dd
Общая информация
Docker BuildKit улучшенная система сборки контейнеров.
Build Enhancements доступен с версии 18.09
Активируется через переменную окружения DOCKER_BUILDKIT (если не используется по-умолчанию)
DOCKER_BUILDKIT=1 docker build .
--mount=type=bind
--mount=type=bind,source=/path,target=/path
- target (required) - Mount path.
- source - Source path in the from. Defaults to the root of the from.
- from - Build stage or image name for the root of the source. Defaults to the build context.
- rw,readwrite - Allow writes on the mount. Written data will be discarded.
Dockerfile
# syntax = docker/dockerfile:1.0-experimental FROM ubuntu:18.04 RUN --mount=type=bind,target=/mnt/build \ ls -lah /mnt/build && \ pip install -r /mnt/build/requirements.txt
Теперь не нужно делать COPY для файлов, которые не нужны в контейнере
--mount=type=cache
Dockerfile
# syntax = docker/dockerfile:1.0-experimental FROM ubuntu:18.04 RUN rm -f /etc/apt/apt.conf.d/docker-clean RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt/lists \ apt-get update RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt/lists \ apt-get install -y curl
DOCKER_BUILDKIT=1 docker build --pull --force-rm --progress=plain -t ubuntu:test .
ubuntu test 9a9abaec17a2 3 seconds ago 78.5MB
$ docker run --rm -it ubuntu:test bash $ du -ch /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/*.* 968K total $ du -chx / 85M total
Во время сборки в контейнер монтируются папки типа cache - их содержимое не сохраняется в слой
Содержимое кэш папки сохраняется на протяжении сборки и доступно для разных команд RUN, но только если она примонтирована
Размер получившегося образа 78.5MB (+14.3), размер данных внутри контейнера 85MB (+15), т.о. делаем вывод, что это работает
(возможно пример не очень практичен, но для эксперимента сойдет)
Обсуждение