Создать образ Docker, используя сборку Docker и tmpfs? - PullRequest
0 голосов
/ 11 февраля 2019

Вопрос: Как вы указываете в Dockerfile или в командной строке docker build, что вы хотели бы, чтобы tmpfs был смонтирован в сборочном контейнере?Это в контексте разделенной сборки - первый контейнер, который будет использовать RAM-диск, создает приложение из источника, а второй этап копирует результат в новый контейнер.

ЭтоВопрос кажется похожим, но мои мотивы отличаются.Меня не очень беспокоит сохранение устаревших слоев изображения, но меня интересует производительность сборки.При экспериментировании за пределами Docker создание конкретного приложения, с которым я работаю, было в 4 раза быстрее, когда все дерево исходных текстов было в ОЗУ, а не на диске.(В проекте много промежуточных сборок и параллелизма, поэтому даже SSD имеет тенденцию немного колебаться)

Поскольку Docker поддерживает монтирование tmpfs во время обычной команды docker run, может показаться, что должен быть способвключить это в Dockerfile?Тем не менее, я не могу найти эту информацию где-либо - почти каждый поиск "tmpfs" и "dockerfile" или "build" или "ramdisk" и т. Д. Просто указывает либо на вышеуказанный связанный пост, либо на документы Docker об использовании tmpfs вконтейнеры начинаются с docker run.

Было бы приемлемо, если бы tmpfs не сохранялся даже до сборки второго контейнера.Это можно исправить, просто скопировав собранное приложение из tmpfs в контейнере сборки перед выходом из этого контейнера, а затем используя это новое местоположение при копировании.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

С BuildKit вы можете использовать экспериментальные функции для монтирования файловой системы tmpfs для одной строки RUN.Эта файловая система не будет существовать вне контекста этой строки RUN, так же как tmpfs не существует, когда контейнер остановлен или удален, поэтому вам необходимо скопировать любые артефакты обратно в файловую систему контейнера в концеваша сборка.

Для BuildKit вам нужно как минимум 18.09, и вы можете включить его:

export DOCKER_BUILDKIT=1

для отдельной оболочки или изменить настройки по умолчанию на хосте, который вы можетеОбновите /etc/docker/daemon.json с помощью:

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

При включенном BuildKit Dockerfile будет выглядеть следующим образом:

# syntax=docker/dockerfile:experimental
FROM your_base_image
COPY src /src
RUN --mount=type=tmpfs,target=/build \
    cp -r /src/. /build/ \
 && cd /build \
 && make your_project \
 && cp /build/result.bin /result.bin
...

Обратите внимание, что BuildKit довольно новый, не будетподдерживается в большинстве сред облачной сборки и пока не поддерживается в docker-compose.Чтобы узнать больше об этих экспериментальных функциях, см .: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md

0 голосов
/ 11 февраля 2019

Точки монтирования в докере настраиваются только тогда, когда вы делаете docker run.Каталоги в докер-файле не должны изменять его поведение.Вот почему точки крепления только в работе.

Надеюсь, это поможет!

...