Сохранение изменений в реестре Windows между перезапусками контейнера Windows - PullRequest
1 голос
/ 02 мая 2019

Учитывая, что приложение Windows работает в контейнере Windows Docker, и во время выполнения работающими приложениями вносятся изменения в реестр Windows, имеется ли переключатель / команда Docker, позволяющая сохранять изменения в реестре Windows, чтобы при контейнер перезапускается, измененные значения сохраняются.

В качестве сравнения, изменения файла могут сохраняться между перезапусками контейнера, предоставляя точки монтирования, например,

docker volume create externalstore
docker run -v externalstore:\data microsoft/windowsservercore

Какая эквивалентная функция для реестра Windows?

1 Ответ

0 голосов
/ 03 мая 2019

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

Стоит отметить различие между контейнером и изображением .

Изображения являются статическими шаблонами.

Контейнеры запускаются из образов, и хотя их можно останавливать и перезапускать, вы обычно выбрасываете их полностью после каждого выполнения с большинством корпоративных проектов, например с 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: Вы должны создать новое изображение, используя докер-файл для статических изменений. Для динамических изменений вам, вероятно, потребуется использовать некоторые умные сценарии.

...