Докеризация службы Windows - PullRequest
0 голосов
/ 05 марта 2020

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

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Я успешно поместил службу Windows в контейнер docker, используя следующий файл Dockerfile. Замените MyWindowsServiceName именем вашей собственной службы windows.

# escape=\

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-1709

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

COPY ["MyWindowsServiceName/bin/Release/", "/Service/"]

WORKDIR "C:/Service/"

RUN "C:/Service/InstallUtil.exe" /LogToConsole=true /ShowCallStack MyWindowsServiceName.exe; \
    Set-Service -Name "\"MyWindowsServiceName\"" -StartupType Automatic; \
    Set-ItemProperty "\"Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyWindowsServiceName\"" -Name AllowRemoteConnection -Value 1

ENTRYPOINT ["powershell"]
CMD Start-Service \""MyWindowsServiceName\""; \
    Get-EventLog -LogName System -After (Get-Date).AddHours(-1) | Format-List ;\
    $idx = (get-eventlog -LogName System -Newest 1).Index; \
    while ($true) \
    {; \
    start-sleep -Seconds 1; \
    $idx2  = (Get-EventLog -LogName System -newest 1).index; \
    get-eventlog -logname system -newest ($idx2 - $idx) |  sort index | Format-List; \
    $idx = $idx2; \
    }

NOTE1 : Моя служба windows регистрирует в системе событий Windows. Таким образом, этот файл содержит хороший код в конце для вывода информации EventLog на консоль в соответствии с Docker соглашением. Вам может или не может понадобиться эта часть для вашего собственного обслуживания. Если нет, используйте только первую строку минус '\'.

NOTE2 : имя службы windows может отличаться от имени ее исполняемого файла. То есть «MyWindowsServiceName.exe» может иметь имя службы «My Windows Service Name» или «Fred», вам нужно знать оба.

0 голосов
/ 05 марта 2020

Как правило, вы должны выбирать базовый образ, на котором уже установлены необходимые библиотеки, а не брать базовый образ, такой как обычный Linux или Windows, и устанавливать на него.

В вашем случае выберите docker изображение, на котором установлено. NET. Это изображение, например Идеальный поток выглядит следующим образом.

  1. Выбрать Docker Образ, который вы хотите использовать
  2. Включите Dockerfile в папку root вашего проекта
  3. Включите команды в Dockerfile для копирования кода или исполняемого файла в образ
  4. Укажите команду запуска
  5. Создайте образ docker build -t YourRepoName . Запустите его в местоположении вашего Dockerfile
  6. Проверьте его docker run YourImage

Dockerfile Это один из докер-файлов, которые я написал для Springboot. Вы можете использовать его для справки. Обратите внимание, я копирую только файл jar здесь на мой Контейнер, а не исходный код, поскольку в момент создания контейнера docker файл jar доступен. Вы можете включить команды для копирования исходного кода и создания исполняемого файла внутри Dockerfile.

...