Ніколи не слід додавати облікові дані в контейнер, якщо ви не вповноважите трансляцію кредитів тому, хто може завантажити зображення. Зокрема, виконувати і ADD creds
пізніше RUN rm creds
не є безпечним, оскільки файл кредитів залишається в кінцевому зображенні в проміжному шарі файлової системи. Кожен, хто має доступ до зображення, легко отримати його.
Типове рішення, яке я бачив, коли вам потрібні записи для перевірки залежностей, і таке використання одного контейнера для створення іншого. Тобто, як правило, у вашому базовому контейнері є деяке середовище збирання, і вам потрібно застосувати це, щоб створити контейнер додатка. Таким простим рішенням є додавання джерела програми, а потім RUN
команди побудови. Це небезпечно, якщо вам потрібні кредити RUN
. Замість того, що ви робите, - це помістити джерело в локальний каталог, запустіть (як і в docker run
) контейнер, щоб виконати етап збирання з локальним каталогом джерела, встановленим як об'єм, а кредити - або введені, або змонтовані як інший том. Після завершення кроку збирання ви збираєте свій остаточний контейнер, просто ADD
використовуючи локальний каталог джерел, який тепер містить вбудовані артефакти.
Я сподіваюся, що Докер додає деякі функції, щоб спростити все це!
Оновлення: схоже, що метод, який рухається вперед, повинен мати вкладені збірки. Коротше кажучи, dockerfile описував би перший контейнер, який використовується для побудови середовища виконання, а потім другий вкладений склад контейнера, який може зібрати всі частини в кінцевий контейнер. Таким чином, речі часу нарощування не знаходяться у другому контейнері. Це програма для Java, де для створення програми вам потрібен JDK, але лише JRE для його запуску. Існує ряд пропозицій, які обговорюються, найкраще починати з https://github.com/docker/docker/isissue/7115 та переходити до деяких посилань на альтернативні пропозиції.