Я работаю над запуском распределенной системы задач на базе Docker, и главная проблема, с которой я столкнулся, — как получить учетные данные для каждой виртуальной машины Docker.
По сути, каждый экземпляр должен иметь уникальное имя и либо пароль/сертификат SSL. Затем он подключается обратно домой при запуске и начинает обработку задач.
Создание экземпляра довольно просто, но какой подход является хорошим для внедрения учетных данных в каждый экземпляр? Общее мнение, похоже, заключается в том, чтобы «использовать переменные среды», но использование переменной среды длиной более 500 символов (например, весь сертификат SSL) кажется грубым.
Прямо сейчас приложение, которое я пытаюсь упаковать, использует простой файл JSON для конфигурации. Есть ли способ добавлять файлы в экземпляр docker во время выполнения или что-то подобное? Возможно, последний шаг сборки, который принимает параметрически определенный файл?
решение1
Вы можете добавить том Docker и указать его, на основе контейнера, на папку на хосте, содержащую нужный вам сертификат SSL. Вы даже можете создать том "из одного файла".
docker run -d \
--name=worker0 \
-v "/etc/ssl/worker0.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker0.key":/etc/ssl/private/container.key \
myworkerimage
docker run -d \
--name=worker1 \
-v "/etc/ssl/worker1.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker1.key":/etc/ssl/private/container.key \
myworkerimage
Затем, что бы вы ни использовали для запуска рабочих процессов, скрипт bash, ansible и т. д., можно выбрать правильный сертификат на хосте, но внутри каждого запущенного контейнера ситуация идентична (сертификат всегда находится по одному и тому же пути).
Возможно, вы захотите сделать эти «файловые тома» доступными только для чтения, чтобы :ro
отразить, что они представляют собой статическую конфигурацию, а не то, что контейнер, как ожидается, может или должен иметь возможность изменять.