Testez vos images Docker

Vous construisez des images Docker régulièrement ? Vous savez alors certainement que ce n’est pas parce que la construction de votre image s’est réalisée sans erreurs que cette dernière va se comporter comme vous vous y attendez. La construction d’une image Docker, tout comme n’importe quel code écris, doit être vérifiée et validée et pour cela, il est possible d’utiliser un outil qui va nous permettre de nous assurer du bon fonctionnement de notre image.

Pour ma part, l’outil que j’utilise se nomme Container Structure Test. Conçu par Google, il permet d’écrire des tests unitaires pour nos images Docker. Développé en Go, il est disponible sous la forme d’un binaire compatible sur la plupart des systèmes d’exploitation.

Grâce à Container Structure Test, vous aurez la possibilité de:

  • Exécuter des commandes à l’intérieur du conteneur et de vérifier la sortie ou l’erreur produite,
  • Tester l’existence d’un fichier
  • Vérifier le contenu d’un fichier (y compris la métadonnée qui lui est associée),
  • Et de vérifier la configuration du conteneur lui-même.

Une fois téléchargée, la mise en place des tests se fait via l’écriture de règle dans un fichier YAML. Voici par exemple, un exemple de configuration que j’utilise pour tester la construction d’image Docker faisant tourner des projets PHP:

schemaVersion: "2.0.0"

# Vérification de la présence de certaines variables d'environnement
globalEnvVars:
    - key: GITHUB_TOKEN
      value: github-token

commandTests:
    - name: "Symfony CLI installed"
      command: "which"
      args: ["symfony"]
      exitCode: 0
    - name: "Check PHP extensions"
      command: "php"
      args: ["-m"]
      expectedOutput:
          - "amqp"
          # ...


fileExistenceTests:
- name: 'Configuration PHP'
  path: 'etc/php/8.3/php.ini'
  shouldExist: false

fileContentTests:
- name: 'Linux Version'
  path: '/etc/os-release'
  expectedContents: ["VERSION_ID=3.14.2","NAME=\"Alpine Linux\""]

Une fois la configuration terminée, il ne vous reste plus qu’à exécuter les tests en spécifiant l’image à tester et la ou les configurations à prendre en compte:

container-structure-test test --image my-registry.jdecool.fr/php:8.3 --config php-tests.yaml

=======================================
====== Test file: php-tests.yaml ======
=======================================
=== RUN: Command Test: Symfony CLI installed
--- PASS
duration: 306.265278ms
stdout: [...]

=== RUN: Command Test: Check PHP extensions
--- PASS
duration: 303.302806ms
stdout: [...]

=== RUN: Command Test: Configuration PHP
--- PASS
duration: 276.503651ms
stdout: [...]

=== RUN: Command Test: Linux Version
duration: 276.503651ms
stdout: [...]

=======================================
=============== RESULTS ===============
=======================================
Passes:      4
Failures:    0
Duration:    789.707605ms
Total tests: 4

PASS