Aller au contenu principal

Pourquoi Docker : Les Dockerfiles

Objectifs pédagogiques

  • Savoir comparer un Dockerfile à d'autres solutions d'IAC (Ansible, puppet)
  • Analyser les avantages et inconvénients de cette solution

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.


Docker, un plat surgelé ?

C'est le Dockerfile qui rapproche Docker des outils 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 très compliqué.


Docker une solution de packaging

La réussite de Docker tient à celle de sa solution d'IAC, qui a permis aux développeurs de fournir leur application sous forme de package simple à exploiter.

Auparavant la création d'images système était réservée aux administrateurs chevronnés.

En fournissant une solution d'IAC simple et efficace, Docker a permis de réduire la complexité qui sépare les développeurs de la production.