Я думаю, что вы после динамических изменений (каждый запуск и остановка контейнера содержит различные пользовательские ключи, которые вы хотите сохранить для следующего запуска), например, перемещаемый профиль, а не статический набор настроек реестра, но я писать для статики, так как это более простой и вероятный ответ.
Стоит отметить различие между контейнером и изображением .
Изображения являются статическими шаблонами.
Контейнеры запускаются из образов, и хотя их можно останавливать и перезапускать, вы обычно выбрасываете их полностью после каждого выполнения с большинством корпоративных проектов, например с Kubernetes.
Если вы хотите запустить Docker-контейнер, такой как виртуальная машина (обычно не рекомендуется), остановив и запустив его, ваши настройки реестра должны сохраняться между запусками.
Можно преобразовать контейнер в изображение с помощью команды docker commit
. В этом методе вы запускаете контейнер, вносите необходимые изменения, а затем фиксируете контейнер в изображении. Новые контейнеры будут запущены из нового образа. Хотя это возможно, на самом деле это не рекомендуется по той же причине, что клонирование компьютера или обновление ОС - нет. Вы получите дополнительные артефакты (файлы, настройки, журналы), которые вам не нужны на изображении. Если это будет сделано неоднократно, это закончится как плохая фотокопия.
Лучший способ сделать статическое изменение - создать новый образ, используя dockerfile . Вам нужно будет прочитать об этом (за рамками этого ответа), но по сути вы пишете сценарий докера, который внесет изменения в существующий образ докера и сохранит его в новом образе (сделано с docker build
) , Преимущество этого в том, что он чище, более повторяем, и каждый этап процесса сборки является многоуровневым. Слои выгодны для экономии места. Изображение, созданное с помощью базы и уровня приложения windowsservercore, затем скопированное на другой компьютер, на котором уже была копия базы windowsservercore, займет только дополнительное пространство уровня приложения.
Если вы хотите многократно создавать контейнеры и применять к ним согласованные настройки, но без создания нового образа, вы можете сделать пару вещей:
- Смонтируйте том с помощью скрипта и установите точку выполнения контейнера / образа для запуска этого скрипта. Сценарий может импортировать параметры реестра и затем запускать любое приложение, которое вы изначально использовали в качестве точки выполнения, обратите внимание, что сценарий должен быть непрерывным циклом. Хороший пример - образ разработчика MS SQL, https://github.com/Microsoft/mssql-docker/tree/master/windows/mssql-server-windows-developer. Сценарий может экспортировать нужные параметры. Не уверен, что есть простой способ обнаружить «выключение» и запустить его в этот момент, но вы могли бы легко настроить его на непрерывную запись в циклически подключенный том.
- Использование системы управления, такой как Docker Compose или Kubernetes, для управления настройками для вас (не уверен, насколько это практично для настроек реестра)
- Приложение должно установить параметры реестра
- Открытые порты для контейнера, которые позволяют удаленное управление контейнером (не рекомендуется из соображений безопасности)
- Смонтируйте том, где файлы реестра находятся в контейнере (я не уверен, где они находятся, или это будет работать правильно)
TL; DR: Вы должны создать новое изображение, используя докер-файл для статических изменений. Для динамических изменений вам, вероятно, потребуется использовать некоторые умные сценарии.