Image personnalisée
Cette section explique comment créer votre propre image WorkflowGen personnalisée afin de personnaliser les fichiers et les DLL de WorkflowGen.
- Windows 10 Pro avec Docker pour Windows installé et les conteneurs Windows activés OU
- Windows Server 2019 avec Docker Enterprise installé
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.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.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
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.
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
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:
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.
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.RaisonnementCeci 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 powershellL'argumentpowershell
sera exécuté par la commandeInvoke-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 2yr ago