Image personnalisée
Aperçu
Cette page explique comment créer une image personnalisée de la base de données WorkflowGen afin d'ajouter du code personnalisé ou des scripts SQL à exécuter. Gardez à l'esprit que ce guide fournit des exemples simples, vous n'êtes donc pas limité à ce qui est montré ici. Les exemples utiliseront la version Linux de l'image. Tous les exemples de code sont dans PowerShell.
Prérequis
Une machine Linux avec Docker installé. Consultez les instructions spécifiques à votre distribution pour installer et configurer le moteur Docker. Consultez l'article Install Docker Engine pour les instructions d'installation. Il pourrait ne pas avoir toutes les distributions prises en charge.
Un Mac avec Docker Desktop pour Mac installé.
Une machine Windows 10 Pro avec Docker Desktop pour Windows installé et les conteneurs Linux activés. Il est recommandé d'utiliser le backend WSL 2 (sous-système Windows pour Linux) s'il est disponible. Sinon, utilisez la valeur par défaut.
Exemple simple
La création de votre propre image WorkflowGen est aussi simple que la création d'un fichier Dockerfile. Créez un répertoire de contexte et ajoutez-y un fichier vide appelé Dockerfile
:
Arborescence des fichiers :
Vous allez ensuite ouvrir le Dockerfile et y ajouter du code :
Cette instruction indique que vous souhaitez baser votre image sur l'image de la base de données WorkflowGen. À partir d'ici, vous pouvez ajouter d'autres instructions pour ajouter des fichiers ou des scripts à exécuter et effectuer l'initialisation personnalisée que vous souhaitez. Par exemple, vous pouvez ajouter un script SQL personnalisé et l'exécuter :
Arborescence des fichiers :
Dockerfile :
Comme vous pouvez le voir, PowerShell est disponible dans le conteneur Linux afin que les scripts puissent être effectués facilement entre Windows et Linux. Si vous préférez les scripts Bash, vous pouvez l'utiliser tout aussi facilement en remplaçant le script .ps1
par votre propre script .sh
.
customcode.ps1
:
Ce script ressemble beaucoup mais est en fait simple. Il commence par importer les bibliothèques SqlServer, Utils et Crypto, puis obtient des informations de l'environnement et initialise les variables en fonction de cela. Ensuite, il vérifie si la base de données a déjà été créée en vérifiant l'existence d'un fichier .mdf
avant de hacher et saler un secret personnalisé, en créant une base de données personnalisée et en exécutant un script avec une variable préparée. Si aucun argument n'est transmis au script, il redémarre le processus SQL Server afin que ses journaux soient écrits dans la sortie standard. S'il y a des arguments, il exécute ce qui est passé.
La condition pour vérifier si la base de données est déjà créée est là car le script sera exécuté après chaque redémarrage et exécution du conteneur. Par conséquent, les fichiers d'état, y compris les fichiers .mdf
et .ldf
de toutes les bases de données à l'intérieur de SQL Server seront déjà là. Il ne sera pas nécessaire de recréer la base de données.
La dernière partie est une bonne pratique générale dans un conteneur Docker. Par exemple, si vous déboguez le conteneur et que vous souhaitez uniquement inviter une ligne de commande PowerShell après la séquence de démarrage, vous passerez PowerShell comme argument à la commande d'exécution comme suit :
L'argument powershell
sera exécuté par la commande Invoke-Expression
et une nouvelle invite de commandes PowerShell s'affichera.
Maintenant, tout ce que vous avez à faire est de construire le conteneur :
Scripts disponibles dans l'image
Advantys a développé certains scripts et modules PowerShell pour prendre en charge certaines fonctionnalités. Voici une liste de ces scripts avec leurs descriptions :
docker-entrypoint.ps1
: Le script principal qui s'exécute lorsque vous exécutez un conteneur. Il gère l'analyse des variables d'environnement, l'initialisation de la base de données WorkflowGen, etc.Chemin Windows :
C:\docker-entrypoint.ps1
Chemin Linux :
/usr/local/bin/docker-entrypoint.ps1
C:\monitor-database.ps1
(version Windows uniquement) : Ce script gère la surveillance du processus de base de données, ainsi que la collecte des journaux de conteneur et leur redirection vers la sortie standard. La version Linux n'a pas besoin de ce script car le processus SQL Server s'exécute au premier plan et écrit ses journaux dans la sortie standard./usr/local/bin/healthcheck.ps1
(version Linux uniquement) : Ce script gère la vérification périodique qui indique si la base de données fonctionne correctement ou non. Ceci est défini dans le Dockerfile et est géré par le moteur Docker. La version Windows a également un bilan de santé défini. C'est une commande simple qui n'a pas besoin de son propre script. Dans Kubernetes, il est ignoré, vous devez donc fournir une sonde liveness (« liveness probe »). Pour plus d'informations, consultez l'article Kubernetes Configure Liveness, Readiness and Startup Probes (disponible en anglais uniquement).*.psm1
: Divers modules PowerShell développés disponibles dans l'image.Chemin Windows :
C:\
Chemin Linux :
/usr/local/lib/
/usr/local/bin/set-state.ps1
(version Linux uniquement) : Définit l'état du conteneur, par exemple en mettant la base de données WorkflowGen hors ligne ou en ligne.Chemin Windows :
C:\
Chemin Linux :
/usr/local/bin/
Dernière mise à jour