Dans ce chapitre, nous allons voir comment l’Infrastructure-as-Code permet de faciliter le déploiement des applications grâce aux fameux conteneurs, aussi appelés containers.
Construisez les images de votre application avec Docker
Notre application PetClinic est construite à partir de fichiers, nommésdockerfiles
, déjà présents dans le contrôle de code source. Cesdockerfiles
sont présents dans le répertoireDocker
du projet et contiennent les lignes suivantes :
FROM eclipse-temurin:17 as builder
WORKDIR application
ARG ARTIFACT_NAME
COPY ${ARTIFACT_NAME}.jar application.jar
RUN java -Djarmode=layertools -jar application.jar extract
# Download dockerize and cache that layer
ARG DOCKERIZE_VERSION
RUN wget -O dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz
RUN tar xzf dockerize.tar.gz
RUN chmod +x dockerize
FROM eclipse-temurin:17
WORKDIR application
# Dockerize
COPY --from=builder application/dockerize ./
ARG EXPOSED_PORT
EXPOSE ${EXPOSED_PORT}
ENV SPRING_PROFILES_ACTIVE docker
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
Cedockerfile
part d’une image qui contient déjà la version 17 de Java et copie tous les .jar des différents projets, afin de construire les différentes images associées. Enfin, la dernière étape de cedockerfile
est de lancer la commandeJava
avec le JAR associé. Le JAR est le résultat de la compilation de l’application Java.
Dans cette partie du cours, vous allez modifier le dockerfile pour voir l’impact de l’Infrastructure-as-Code sur votre pipeline de déploiement. Pour ce faire, suivez les manipulations dans la vidéo suivante.
De manière générale, tous les outils qui respectent la norme Open Container Initiative(OCI) peuvent piloter des conteneurs. Ces conteneurs deviennent alors l’artéfact de livraison standard et universel des applications.
Vous venez de voir à quel point l’Infrastructure-as-Code est pratique pour tester rapidement le changement de version d’un framework, ou le changement de version d’un middleware comme Apache ou IIS. En ne changeant que quelques lignes, nous pouvons alors relancer tout le pipeline, afin de voir s’il y a un impact sur le code applicatif.
Déployez votre application avec Docker Compose
L’Infrastructure-as-Code ne s’arrête pas là. Dans le cas de Docker, toute l’application peut être déployée grâce au fichierdocker-compose.yml
qui contient toute la définition de l’application, la relation entre les images Docker et le sens de démarrage de celles-ci.
Le nom des images Docker est codé en dur dans le fichierdocker-compose.yml
présent dans le repository Git. Vous allez devoir remplacer le nom des images par les nouvelles images que vous venez de créer.
Remplacez alors toutes les lignes contenantspringcommunity/
par votre nom de registry (chez moi,registry.gitlab.com/laurentgrangeau/
). De plus, ajoutez aussi en bout de ligne le numéro de version de l’image que vous venez de créer:3.0.2
.
Le fichierdocker-compose.yml
devrait ressembler à ceci (le fichier est volontairement tronqué) :
version: '2'
services:
config-server:
image: registry.gitlab.com/laurentgrangeau/spring-petclinic-config-server:3.0.2
container_name: config-server
mem_limit: 512M
ports:
- 8888:8888
discovery-server:
image: registry.gitlab.com/laurentgrangeau/spring-petclinic-discovery-server:3.0.2
container_name: discovery-server
mem_limit: 512M
depends_on:
- config-server
entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"]
ports:
- 8761:8761
Et voilà, vos fichiers Docker et Docker Compose sont prêts à être lancés par votre pipeline de livraison continue.
En résumé
L’Infrastructure-as-Code est pratique pour tester rapidement le changement de version d’une framework ou d’un middleware.
Toute application peut être déployée grâce à Docker Compose.
Maintenant que vous maîtrisez cette étape qui permet de déployer automatiquement l’application à chaque modification de code, vous allez voir dans le prochain chapitre comment configurer votre pipeline pour qu’il déploie votre code grâce à Docker et Docker Compose, ainsi que le lancement automatique des tests.