Более быстрая сборка Dockerfile с использованием ramdisk - PullRequest
0 голосов
/ 03 августа 2020

Мы запускаем процесс сборки, который компилирует несколько артефактов из большой базы кода.

На приличном spe c i7 с SSD это занимает ~ 20 минут, однако, когда я перехожу на использование tmpfs, время падает до ~ 3 минуты.

Мы упаковываем процесс сборки с помощью docker -compose, чтобы гарантировать, что все разработчики получат идентичную среду сборки, но также хотим, чтобы они могли запускать проект с использованием артефактов в кэше Docker если нет изменений. Воспринимаемое время сборки является проблемой, но мы также обеспокоены износом дисков, поскольку процесс записи> 1 ГБ для каждой сборки.

Есть ли способ смонтировать tmpfs в командах Dockerfile 'RUN' ( НЕ этап запуска контейнера)?

Я пытался использовать mount (см. Ниже), но получил отказ в разрешении:

RUN mkdir -p /core_src && mount -t tmpfs /dev/foo /core_src

1 Ответ

1 голос
/ 03 августа 2020

Экспериментальный интерфейс для buildkit позволяет tmpfs монтировать на этапе выполнения .

Ваш Dockerfile будет выглядеть так:

# syntax=docker/dockerfile:experimental
FROM your_base_image
RUN --mount=type=tmpfs,target=/core_src compile_command_here

Затем, чтобы включить buildkit с помощью compose, вы можете установить две переменные среды:

export DOCKER_BUILDKIT=1 # or configure in daemon.json
export COMPOSE_DOCKER_CLI_BUILD=1

Включение buildkit в /etc/docker/daemon.json выглядит так:

{ "features": { "buildkit": true } }

И затем dockerd необходимо перезагрузить для использования это (systemctl reload docker).

...