Aller au contenu principal

Pourquoi Docker épisode II : "surgeler" une application avec un Dockerfile

Analogie

On va voir que Docker, c'est un peu comme servir des plats surgelés - qui peuvent être par ailleurs de bonne qualité selon leur prix.

On va opposer ça avec la "cuisine maison", qui nécessite

  • de faire les courses,
  • d'avoir des recettes
  • d'y passer du temps
  • d'avoir du matériel

Et qui peut être bonne ou mauvaise selon la qualité des cuisines, des ingrédients, etc.

Elle implique beaucoup de connaissances, ce qui rend le déploiement de nouvelles applications parfois difficile.

Et selon la manière dont on aura plus ou moins bien conçu sa cuisine et formé les cuistots...

On aura de bons résultats et une bonne capacité d'évolution.

Les pratiques d'Infrastructure As Code

L'objectif de l'IAC est de définir dans du code des actions de gestion d'infrastructure.

Une fois automatisées de la sorte, ces opérations peuvent être reproduites.

Docker, le plat surgelé de l'IaC ?

Avec Docker on fournit une recette qu'on cuisine à l'avance et qu'on congèle. On pourra décongeler pour un déploiement prévisible le moment venu (en plus le plat peut se multiplier tout seul)

Avec Docker on a découper la tache de déploiement en deux temps :

  1. build d'une image complexe mais géré à l'avance.
  2. déploiement de l'image / du logiciel simplifiée car une bonne part de la complexité a été gérée en amont.

C'est le Dockerfile qui fait de Docker un outil d'IAC.**

FROM node:18-alpine
MAINTAINER support@mytechcompany.io
LABEL "author"="Blue Team"
WORKDIR /app
COPY . .
RUN yarn install --production
RUN adduser -D nodejs
USER nodejs
ARG CUSTOMER_API="v1"
ENTRYPOINT ["node"]
CMD ["src/index.js"]
EXPOSE 3000
VOLUME /data
HEALTHCHECK --interval=60s --timeout=5s \
CMD curl -f http://localhost:3000/heathz || exit 1

C'est un fichier qui définit les conditions nécessaires pour que le process de votre application se lance correctement.

Ça inclut :

  • les packages
  • les utilisateurs
  • les fichiers de configuration
  • le code applicatif
  • le lancement du process
  • les besoins en stockage
  • les ports réseaux
  • la surveillance de l'application

L'image Docker est «prête à consommer».

Avantage : Une image Docker contient toutes ces informations et rend l'application simple à lancer pour un utilisateur.

Désavantage : Vous ne savez pas ce que l'image contient, comment elle fonctionne, ce qu'elle exécute. En cas de problème, ça peut devenir compliqué.