Image personnalisée

Aperçu

Cette section explique comment créer votre propre image WorkflowGen personnalisée afin de personnaliser les fichiers et les DLL de WorkflowGen.

Prérequis

  • Windows 10 Pro avec Docker pour Windows installé et les conteneurs Windows activés OU

  • Windows Server 2019 avec Docker Enterprise installé

Description

L'image WorkflowGen fournit une variante utile nommée advantys/workflowgen:7.18.3-win-ltsc2019-onbuild qui permet de personnaliser facilement tout fichier contenu dans C:\inetpub\wwwroot ou C: Program Files\Advantys\WorkflowGen. Tout ce que vous avez à faire est de créer votre propre image avec un fichier Docker héritant de la variante onbuild et de placer les fichiers personnalisés dans le contexte de build de Docker.

Exemple simple

Voici un exemple simple qui remplace le fichier web.config, personnalise la bannière et ajoute une bibliothèque personnalisée.

Les chemins .\inetpub\wwwroot et .\Program Files\Advantys\WorkflowGen doivent exister pour que la build réussisse. Ils ne doivent pas nécessairement contenir de fichiers, ils peuvent donc être vides.

Étape 1 : Ajoutez vos fichiers modifiés à la racine du contexte

Voici l'arborescence de fichiers du répertoire de contexte à partir duquel vous allez générer votre image WorkflowGen personnalisée :

context-dir\
      inetpub\
          wwwroot\
              web.config
              wfgen\
                  web.config
                  bin\
                      MyCustomLib.dll
                  ws\
                      bin\
                          MyCustomLib.dll
                  App_Themes\
                      Default\
                          portal\
                              banner\
                                  banner.htm
      Program Files\
          Advantys\
              WorkflowGen\
                  Services\
                      Bin\
                          MyCustomLib.dll

Étape 2 : Ajoutez un Dockerfile dans le répertoire de contexte

Arborescence des fichiers :

context-dir\
      Dockerfile
      inetpub\
          wwwroot\
              web.config
              wfgen\
                  web.config
                  bin\
                      MyCustomLib.dll
                  ws\
                      bin\
                          MyCustomLib.dll
                  App_Themes\
                      Default\
                          portal\
                              banner\
                                  banner.htm
      Program Files\
          Advantys\
              WorkflowGen\
                  Services\
                      Bin\
                          MyCustomLib.dll

Voici le contenu du Dockerfile :

 #escape=`
 FROM advantys/workflowgen:7.18.3-win-ltsc2019-onbuild

 # You can add any instructions in order to install other services or tools, etc.
 # You also can add other files at any other location in the container.

Étape 3 : Générez votre image WorkflowGen personnalisée

 Set-Location C:\Path\To\context-dir
 docker image build -t mycorporation/workflowgen:7.18.3-win-ltsc2019 .

 # Optionally, you can push your custom image to your container registry
 docker image push mycorporation/workflowgen:7.18.3-win-ltsc2019

Génération avec Docker Compose

Avec Docker Compose, vous pouvez spécifier les paramètres de build dans un format déclaratif afin d’intégrer le processus de génération de Docker à l’exécution. Par exemple, vous pourriez avoir le fichier Compose suivant nommé docker-compose.yml dans votre répertoire de contexte :

version: '3.7'
 services:
   workflowgen:
     build:
       context: .
       dockerfile: .\Dockerfile
     image: mycorporation/workflowgen:7.18.3-win-ltsc2019
     restart: always
     env_file:
       - '.\workflowgen.env'
     ports:
       - '8080:80'
     volumes:
       - 'wfgdata:C:\wfgen\data'
       - 'licenses:C:\wfgen\licenses:RO'
     depends_on:
       - database
   database:
     image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
     env_file:
       - '.\database.env'
     volumes:
       - 'sqldata:C:\wfgen\sql'
 
 volumes:
   wfgdata:
   licenses:
     external: true
   sqldata:
 

(Ce fichier provient de la section Démarrer.)

La section importante est l'objet build dans l'objet de service workflowgen.

Ensuite, pour générer et baliser automatiquement, vous pouvez exécuter la commande suivante :

 docker-compose build workflowgen

Docker Compose va alors générer et baliser votre image avec la balise présente dans la propriété image. Si vous souhaitez mettre à jour immédiatement votre déploiement Compose sur votre ordinateur local ou exécuter immédiatement ce déploiement après la génération, exécutez la commande suivante, qui générera votre conteneur en plus de l'exécution des services après la génération :

 docker-compose up --build

Pour pousser l'image à l'aide de Docker Compose, exécutez la commande suivante :

 docker-compose push workflowgen

Vous avez maintenant une image WorkflowGen personnalisée. Pour en savoir plus sur la mise à jour de votre conteneur lorsqu'une nouvelle version de WorkflowGen est disponible, voir la section Gestion des mises à jour.

Exemple avec une application / procédure Web WorkflowGen personnalisée patrimoniale

Supposons qu'en plus des DLLs et des bannières personnalisées, vous ayez une application Web ASP.NET 2.0 à ajouter au dossier wfapps et à configurer dans IIS. Vous devez suivre les mêmes étapes que précédemment, mais ajouter un script Docker CMD personnalisé qui configurera l'application dans IIS.

Plusieurs scripts PowerShell sont fournis avec l'image WorkflowGen et ont des objectifs différents :

  • docker-entrypoint.ps1 : Le script principal à exécuter lorsque vous exécutez un conteneur. Il gère l'analyse des variables d'environnement, la configuration des méthodes d'authentification, etc.

  • monitor-services.ps1 : Ce script gère la surveillance des processus (services IIS et Windows), ainsi que la collecte des logs du conteneur et leur redirection vers la sortie standard.

  • healthcheck.ps1 : Ce script gère la vérification périodique qui indique si WorkflowGen fonctionne correctement ou non. Ceci est défini dans le Dockerfile WorkflowGen et est géré par le moteur Docker.

  • *.psm1 : Différents modules PowerShell développés et disponibles dans l'image.

  • ServiceMonitor.exe : exécutable binaire fourni par Microsoft. Il s'agit du principal fichier exécutable utilisé par le script de surveillance pour vérifier l'état d'un service. (Pour plus d'informations sur ServiceMonitor, consultez sa page GitHub à l'adresse microsoft/IIS.ServiceMonitor.)

  • set-state.ps1: Définit l'état du conteneur, comme mettre le site Web hors ligne ou en ligne.

En créant votre propre image WorkflowGen dans Docker, vous pouvez remplacer n'importe quel script par le vôtre qui fait complètement autre chose, et il est recommandé de le faire si les scripts de stock ne font pas ce que vous voulez. Dans le cas de cet exemple, les scripts de stock ne se chargent pas de définir l'application Web ajoutée comme dans IIS; vous devez développer votre propre script pour cela. Voici celui que vous utiliserez dans cet exemple :

<#
.SYNOPSIS
    Add the custom web application to IIS.
.NOTES
    File name: custom-web-app-install.ps1
#>
#requires -Version 5.1
Import-Module IISAdministration
Import-Module C:\Const.psm1 -Variable Constants
Import-Module C:\Utils.psm1 -Fonction "Get-EnvVar"

$wfgenStartService = (Get-EnvVar "WFGEN_START_SERVICE" -DefaultValue "all").ToLower()
$isWebServices = $wfgenStartService -eq $Constants.SERVICE_ALL -or
    $wfgenStartService -eq $Constants.SERVICE_WEB_APPS

if ($isWebServices -and (Get-WebApplication -Site "wfgenroot" -Name "wfgen/wfapps/<YOUR_WEB_SERVICE_NAME>").Count -le 0) {
    Write-Host "CONFIG: Adding mywebapp to IIS ... " -NoNewLine
    ConvertTo-WebApplication -PSPath "IIS:\Sites\wfgenroot\wfgen\WfApps\<YOUR_WEB_SERVICE_NAME>" | Out-Null
    Write-Host "done" -ForegroundColor Green
}

if ($args.Count -gt 0) {
    Invoke-Expression ($args -join " ")
} else {
    . C:\monitor-services.ps1
}

Remplacez <YOUR_WEB_SERVICE_NAME> par le nom du service Web que vous avez ajouté dans le dossier wfapps.

Dans ce script, notez ce qui suit :

  1. Vous vérifiez le type de service de démarrage et vérifiez si vous avez déjà ajouté le service Web en tant qu'application Web dans IIS. Raisonnement En effet, le script de point d'entrée est réexécuté entre les redémarrages du conteneur. Par conséquent, ce script sera également réexécuté après un redémarrage. Lors du redémarrage d'un conteneur, la configuration IIS est conservée et la commande ConvertTo-WebApplication provoque l'échec de la procédure de démarrage lors de la tentative d'ajout d'une application Web déjà ajoutée. Par conséquent, vous devez vérifier que vous n'avez pas déjà ajouté l'application. En outre, vous vérifiez si le conteneur s'exécute en mode applications Web. Dans le cas contraire, vous n'avez pas besoin d'ajouter votre service Web dans IIS car seuls les services Windows seront exécutés.

  2. Vous vérifiez les arguments et les exécutez s'il y en a. Sinon, vous commencez à surveiller les services du conteneur.

    Raisonnement

    Ceci est une bonne pratique générale dans un conteneur Docker. Par exemple, si vous déboguez le conteneur et souhaitez uniquement inviter une ligne de commande PowerShell après la séquence de démarrage, vous transmettez powershell en tant qu'argument à la commande d'exécution, comme suit :

     docker container run -it `
         # ...
         mycorporation/workflowgen:7.18.3-win-ltsc2019 C:\custom-web-app-install.ps1 powershell

    L'argument powershell sera exécuté par la commande Invoke-Expression et une nouvelle invite de commande PowerShell s'affichera. Si aucun argument n'est transmis, le comportement par défaut consiste à commencer à surveiller les services. Comme l'image contient déjà un script pour cela, il vous suffit de l'exécuter.

Votre Dockerfile sera alors comme suit :

#escape=`
FROM advantys/workflowgen:7.18.3-win-ltsc2019-onbuild

SHELL ["powershell", "-Command"] 

COPY .\custom-web-app-install.ps1 C:\
CMD C:\custom-web-app-install.ps1

Après cela, vous effectuerez les mêmes étapes de génération et de poussée que dans l'exemple précédent.

Dernière mise à jour