Эффективное извлечение SVN в Docker-контейнере - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу получить некоторые файлы (в частности, набор тестов http://llvm.org/svn/llvm-project/test-suite/trunk) в моем контейнере докера.

Теперь я просто использую RUN svn co http://llvm.org/svn/llvm-project/test-suite/trunk train.out/llvm-test-suite внутри Dockerfile.

Работает, но не выглядит эффективно: на каждом сборщике докеров мне нужно подождать ~ 5 минут, пока тесты загружаются. Есть ли лучший способ запретить Docker каждый раз проверять этот файл? Единственная альтернатива, которую я вижу сейчас, - это включение файла в контейнер.

1 Ответ

0 голосов
/ 12 ноября 2018

Обычно вы не запускаете инструменты управления исходным кодом из Dockerfile. Проверьте их в каталоге хоста (еще лучше, если вы можете управлять им, добавьте Dockerfile непосредственно в репозиторий, который вы пытаетесь создать) и запустите docker build со всеми его входами непосредственно на диске.

Для этого есть несколько веских причин:

  • Кэширование изображений Docker часто может означать, что Docker не будет повторять операции типа «клон», «оформить заказ» или «вытянуть»: он знает, что это было сделано один раз, и уже знает его вывод и пропускает шаг, даже если есть новые коммиты, которых у вас нет.

  • Добавление инструментов, таких как svn или git, к изображению, которое вам нужно только создать, делает его излишне большим. (Многоступенчатые сборки могут этого избежать, но они относительно новые.)

  • Более распространенным вариантом использования этого является клонирование частного хранилища, для которого требуются учетные данные, и трудно избежать утечки этих учетных данных в окончательное изображение. (Опять же, многоэтапные сборки могут избежать этого, с некоторой осторожностью, но лучше вообще не подвергаться защите.)

...