Никогда не следует добавлять учетные данные в контейнер, если вы не согласны с передачей кредитов тому, кто сможет загрузить изображение. В частности, выполнение и ADD creds
позже RUN rm creds
не является безопасным, поскольку файл creds остается в конечном изображении на уровне промежуточной файловой системы. Любой, имеющий доступ к изображению, может легко извлечь его.
Типичное решение, которое я видел, когда вам нужны кредиты для проверки зависимостей, например, использование одного контейнера для создания другого. То есть обычно у вас есть базовая среда сборки в базовом контейнере, и вам нужно вызывать ее для сборки контейнера приложения. Поэтому простое решение - добавить исходный код приложения, а затем RUN
команды сборки. Это небезопасно, если вам нужны кредиты в этом RUN
. Вместо этого вы помещаете свой источник в локальный каталог, запускаете (как в docker run
) контейнер для выполнения шага сборки, когда локальный каталог источника монтируется как том, а кредиты либо внедряются, либо монтируются как другой том. После того, как шаг сборки завершен, вы создаете свой окончательный контейнер, просто ADD
используя локальный исходный каталог, который теперь содержит встроенные артефакты.
Я надеюсь, что Docker добавляет некоторые функции, чтобы упростить все это!
Обновление: похоже, что в будущем будет использоваться метод построения вложенных сборок. Вкратце, файл dockerfile будет описывать первый контейнер, который используется для построения среды выполнения, а затем вторую сборку вложенного контейнера, которая может собрать все части в конечный контейнер. Таким образом, материал во время сборки не находится во втором контейнере. Это Java-приложение, в котором вам нужен JDK для сборки приложения, но только JRE для его запуска. Обсуждается ряд предложений, лучше всего начать с https://github.com/docker/docker/issues/7115 и перейти по некоторым ссылкам для получения альтернативных предложений.