Cette page parcourt le flux complet de préparation d’une image Docker personnalisée pour le Stack Harbor PaaS : écrire un Dockerfile sur un modèle de base de la plateforme, bâtir l’image, la pousser vers un registre, et y pointer la plateforme. L’exemple bâtit un serveur d’application WildFly, mais la structure s’applique à toute image — choisir une base, empiler son logiciel, exposer les bons ports, déclarer un point d’entrée.
Il y a trois phases :
- Composer le Dockerfile.
- Bâtir et pousser l’image.
- La déployer sur un environnement.
Composer le Dockerfile
Un Dockerfile est un manifeste texte que le démon Docker exécute pour bâtir une image. Chaque ligne est une instruction ; le démon les exécute en ordre et capture le résultat.
1. Choisir une base
Utilisez la base AlmaLinux 9 de la plateforme — elle porte la configuration attendue par le PaaS pour supervision, SSH, journalisation et cycle de vie.
FROM almalinux:9
Pour des images qui exigent une autre distribution, voir les exigences d’image de conteneur pour la liste des bases supportées.
2. Métadonnées et variables
LABEL porte les métadonnées (mainteneur, version, description). ENV déclare les variables d’environnement que les étapes RUN suivantes peuvent interpoler et que le conteneur héritera à l’exécution.
LABEL maintainer="ops@example.com"
ENV WILDFLY_VERSION=36.0.0.Final
ENV ADMIN_USER=admin
ENV ADMIN_PASSWORD=admin
ADMIN_PASSWORD devrait être remplacé après le premier déploiement — gravez un défaut manifestement provisoire pour qu’il soit facile à repérer.
3. Installer les dépendances d’exécution
RUN exécute des commandes shell pendant le build. Pour WildFly il faut un JDK et tar pour décompacter la distribution.
RUN dnf -y install java-17-openjdk-devel tar && dnf -y update
4. Récupérer et décompacter l’application
Téléchargez la distribution WildFly depuis la release officielle, décompactez sous /opt, nettoyez l’archive.
RUN cd /opt \
&& curl -LO https://github.com/wildfly/wildfly/releases/download/$WILDFLY_VERSION/wildfly-$WILDFLY_VERSION.tar.gz \
&& tar xf wildfly-${WILDFLY_VERSION}.tar.gz \
&& rm wildfly-${WILDFLY_VERSION}.tar.gz
5. Lien symbolique pratique
Un chemin stable /opt/wildfly rend les fichiers de configuration ultérieurs agnostiques à la version.
RUN ln -s /opt/wildfly-$WILDFLY_VERSION /opt/wildfly
6. Fichier de configuration du serveur
WildFly lit ses options de lancement depuis un fichier sysconfig. Gravez le chemin, l’emplacement des journaux et les adresses de liaison dans l’image.
RUN echo -en "WILDFLY_SH=/opt/wildfly/bin/standalone.sh\n\
WILDFLY_SERVER_CONFIG=standalone.xml\n\
WILDFLY_CONSOLE_LOG=/var/log/wildfly/console.log\n\
WILDFLY_OPTS=\"-b 0.0.0.0 -bmanagement=0.0.0.0 -Djboss.management.http.port=4949 -Djboss.management.https.port=4848 -Djboss.server.log.dir=/var/log/wildfly/\"\n" \
>> /etc/sysconfig/wildfly-standalone.conf
7. Unité systemd
AlmaLinux 9 et WildFly 36 utilisent systemd. Déposez le fichier d’unité fourni par WildFly dans /etc/systemd/system.
RUN cp /opt/wildfly-$WILDFLY_VERSION/bin/systemd/wildfly-standalone.service /etc/systemd/system/wildfly.service
8. Utilisateur de service, répertoire de journaux, permissions
RUN systemctl enable wildfly \
&& mkdir -p /var/log/wildfly \
&& adduser wildfly \
&& chown -R wildfly:wildfly /opt/wildfly-$WILDFLY_VERSION /opt/wildfly /var/log/wildfly
9. TLS auto-signé pour le panneau admin
RUN cd /opt/wildfly/standalone/configuration \
&& keypass=password \
&& keytool -genkeypair -alias serverkey -keyalg RSA -keysize 4096 -validity 7360 \
-keystore application.keystore -keypass $keypass -storepass $keypass \
-dname "cn=Server Administrator,o=Acme,c=GB" \
&& chown wildfly:wildfly application.keystore
Les déploiements de production devraient remplacer ceci par un vrai certificat — la clé auto-signée n’est acceptable que pour la mise en route initiale.
10. Utilisateur admin
RUN /opt/wildfly/bin/add-user.sh --user $ADMIN_USER --password $ADMIN_PASSWORD --silent --enable
11. Locale, exposition des ports, point d’entrée
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
EXPOSE 22 80 443 8080 8743 9990 9993 8009 4848 4949
ENTRYPOINT ["/bin/bash"]
EXPOSE déclare les ports qu’ouvre l’image — la plateforme utilise cette liste pour le câblage DNS et répartiteur. ENTRYPOINT définit le processus lancé au démarrage du conteneur ; voir configuration d’exécution pour le mappage tableau de bord vers ENTRYPOINT et CMD.
Bâtir et pousser l’image
Une fois le Dockerfile en place, bâtissez et poussez depuis un poste avec Docker installé.
1. Build
sudo docker build -t {image_name} {dockerfile_location}
{image_name}— nom du dépôt avec un tag optionnel (par ex.examplerepo/wildfly:latest). Sans tag, Docker prendlatest.{dockerfile_location}— chemin local ou URL..si le Dockerfile est dans le répertoire courant.
2. Vérifier
sudo docker images
La nouvelle image doit être dans la liste.
3. Pousser
sudo docker push {image_name}
{image_name} est la même chaîne qu’au build. Le premier push demande les identifiants du registre ; vous pouvez éviter l’invite en lançant docker login à l’avance — les identifiants sont alors stockés dans ~/.docker/config.json.
Déployer sur la plateforme
Une fois l’image au registre, pointez un environnement Stack Harbor PaaS dessus via l’assistant de topologie.
- Cliquez sur New Environment dans le tableau de bord. Passez à l’onglet Custom. Cliquez sur Select Image.
- Passez au sous-onglet Custom (ou Search si l’image est sur Docker Hub public). Cliquez sur Add New Image.
- Renseignez Name avec
[{registry_hostname}/]{namespace}/{image_name}— l’hôte du registre est optionnel pour Docker Hub, requis ailleurs. - Pour un registre privé, renseignez Username et Password. Sinon laissez vides.
- Cliquez sur Add. L’image apparaît dans la liste Custom.
- Sélectionnez l’image sur le palier voulu (choix typique pour un serveur d’app : le palier Application Servers ; le répartiteur partagé de la plateforme s’y branche automatiquement). Configurez le reste du palier — nombre d’instances, redimensionnement, points de montage, variables.
- Cliquez sur Create.
L’environnement se provisionne en quelques minutes. Open in Browser sur le palier ouvre le domaine de l’application.
Pour WildFly spécifiquement, la page d’accueil répond sur le domaine par défaut, et la console admin est joignable par le lien sur cette page. Connectez-vous avec les identifiants gravés au Dockerfile (admin/admin dans cet exemple) — tournez-les immédiatement.