10 outils qui complètent Docker
Docker est la plateforme de conteneurisation la plus connue mais elle n’existe pas isolément. Tout un écosystème d’outils complémentaires et de projets dérivés a vu le jour autour du passage aux conteneurs.
Voici un tour d’horizon de 10 analyseurs, indexeurs et orchestrateurs open source qui rendent Docker encore plus pratique et utile. Que vous soyez encore au début de votre parcours Docker ou que vous soyez un praticien chevronné utilisant la technologie en production, vous trouverez peut-être ici quelque chose qui vaut la peine d’être inclus dans votre prochain projet.
Sommaire
Docker Composer
Docker Compose est le seul outil de cette liste qui fait en fait partie de Docker. Compose est un moyen accessible de créer des « piles » de conteneurs Docker que vous pouvez gérer à l’unisson.
La CLI Docker standard vous permet d’interagir avec des conteneurs individuels. Compose fournit une interface similaire pour travailler avec des conteneurs dans leur ensemble. Cela permet de contrôler facilement les systèmes qui nécessitent plusieurs conteneurs, tels qu’un serveur d’applications, une base de données et une couche de mise en cache. Vous définissez ces composants comme des services dans un docker-compose.yml
fichier, puis utilisez le docker-compose
binaire pour les démarrer tous ensemble :
version: 3 services: app: image: example.com/example-app:latest ports: - 80:80 database: image: mysql:latest expose: - 3306 cache: image: redis:latest expose: - 6379
Fonctionnement docker-compose up -d
créerait trois conteneurs, un pour les services d’application, de base de données et de cache. Ils seront automatiquement liés entre eux. C’est beaucoup plus gérable que de répéter le docker run
commande plusieurs fois.
portier
Portainer est une interface graphique pour votre installation Docker. C’est un outil basé sur un navigateur qui offre une interface complète pour afficher, créer et configurer vos conteneurs. Vous pouvez également interagir avec d’autres types d’objets Docker tels que des images, des réseaux et des volumes.
Portainer est déployé en tant que sa propre image Docker :
docker run -d -p 9000:9000 --name=portainer -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Cela configure une instance Portainer à laquelle vous pouvez accéder à localhost:9000
. Cela fonctionne en montant le socket Docker de votre hôte dans le conteneur Portainer. Portainer peut donc utiliser le socket pour gérer les conteneurs exécutés sur votre hôte.
Kubernetes
Kubernetes est une plateforme d’orchestration de conteneurs distribuée. C’est un moyen courant de déplacer des charges de travail Dockerisées vers des environnements de production. Un cluster Kubernetes se compose de plusieurs nœuds (machines physiques) qui sont chacun éligibles pour héberger des instances de conteneur.
Kubernetes vous offre une mise à l’échelle et une distribution simples. Alors que Plain Docker expose des conteneurs individuels sur une seule machine, Kubernetes gère plusieurs conteneurs qui s’exécutent de manière transparente sur plusieurs nœuds.
Comme Kubernetes est compatible OCI, vous pouvez déployer vos images Docker existantes dans votre cluster :
apiVersion: apps/v1 kind: Deployment spec: replicas: 3 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example image: example.com/example-image:latest ports: - containerPort: 80
kubectl apply -f deployment.yml
Cet exemple crée un déploiement Kubernetes du example.com/example-image:latest
image. le replicas: 3
signifie que vous vous retrouverez avec trois instances de conteneur, fournissant une redondance pour votre système. Le déploiement est similaire à l’exécution docker run -d -p 80:80 example.com/example-image:latest
, bien que cela ne démarre qu’un seul conteneur.
Traefik
Traefik est un proxy inverse HTTP facile à intégrer aux charges de travail de conteneur. Il se reconfigure automatiquement avec de nouvelles routes lorsque vous créez et supprimez des conteneurs.
Traefik vous permet d’attacher des étiquettes à vos conteneurs pour définir les noms de domaine et le comportement de transfert. Le logiciel créera des routes proxy appropriées chaque fois qu’un conteneur avec des étiquettes correspondantes rejoint le réseau Traefik.
Traefik propose également des capacités d’équilibrage de charge, une prise en charge des WebSockets, une API REST, des métriques intégrées et un tableau de bord Web pour que vous puissiez surveiller votre trafic en temps réel. C’est un bon moyen d’exposer plusieurs conteneurs publics via des noms de domaine à l’aide d’une seule installation Docker.
Anecdote
Trivy est un scanner d’images de conteneurs qui découvre les vulnérabilités connues. L’analyse de vos images avant de les déployer en production vous donne l’assurance que vos charges de travail sont sûres et sécurisées.
Trivy est disponible en tant que sa propre image Docker. Vous pouvez lancer une simple analyse du example-image:latest
image à l’aide de la commande suivante :
docker run --rm -v trivy-cache:/root/.cache/ -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image example-image:latest
Trivy identifie les packages logiciels de votre image, recherche les vulnérabilités et produit un rapport contenant l’ID CVE, la gravité et la plage de versions impactée de chaque problème. Vous devez mettre à niveau chaque package vers le FIXED VERSION
indiqué par Trivy. L’exécution de l’outil après la création d’une image est donc un moyen simple de renforcer la sécurité de vos déploiements.
Syft
Syft génère des SBOM (nomenclature logicielle) à partir d’images Docker. Ce sont des listes de tous les packages du système d’exploitation et des dépendances du langage de programmation inclus dans l’image.
Syft vous aide à auditer votre chaîne d’approvisionnement logicielle. Docker facilite le référencement du contenu distant et la superposition de systèmes de fichiers complexes sans nécessairement s’en rendre compte. Il est encore plus difficile pour les utilisateurs de votre image de comprendre ce qu’il y a à l’intérieur.
Les récentes attaques très médiatisées ont démontré que les chaînes d’approvisionnement logicielles trop longues constituent une menace sérieuse. L’exécution de Syft sur vos images vous tient informé de leur composition, vous permettant d’évaluer si vous pouvez supprimer certains packages ou passer à une image de base plus minimale.
Plonger
Sur un thème connexe, Dive simplifie les inspections du système de fichiers image Docker. Les images sont assez opaques par défaut, il est donc courant de démarrer un conteneur pour déterminer ce qui se trouve à l’intérieur. Cela pourrait vous mettre en danger si l’image contient un processus malveillant.
Dive vous permet de naviguer dans le système de fichiers d’une image à l’aide d’une arborescence interactive dans votre terminal. Vous pouvez également parcourir les couches individuelles pour voir comment l’image a été construite. Afficher uniquement les modifications dans une seule couche vous aide à visualiser les modifications appliquées par chaque étape de construction, même si vous n’avez pas accès au fichier Docker d’origine.
Flocteur
Flocker est un gestionnaire de volume qui combine la gestion des conteneurs et de leurs données persistantes. Il prend en charge les environnements multi-hôtes, simplifiant la migration des volumes entre les hôtes à mesure que les conteneurs sont reprogrammés.
Cette portabilité garantit que les volumes sont disponibles partout où se trouvent les conteneurs. Les volumes Docker traditionnels ne peuvent pas quitter l’hôte sur lequel ils ont été créés, forçant vos conteneurs à rester également en stase.
La prise en charge du stockage distribué facilite la transition des conteneurs vers la production. Flocker est idéal pour les conteneurs avec état qui doivent être mis à l’échelle dans des environnements distribués tout en maintenant la compatibilité avec divers moteurs de stockage. Il prend en charge les backends, notamment Amazon EBS, Google GCE et OpenStack Block Storage.
Dokku
Dokku utilise Docker pour vous permettre d’héberger vous-même votre propre plate-forme en tant que service (PaaS). Il lance automatiquement les conteneurs Docker lorsque vous envoyez du code à l’aide de Git.
En tant que plate-forme d’applications complète, Dokku vous permet de mapper des domaines, d’ajouter SSL, de déployer plusieurs environnements via des branches Git et de configurer des services auxiliaires tels que des bases de données. C’est une excellente alternative aux plates-formes commerciales comme Heroku et Firebase qui vous permet de conserver vos déploiements de production sur votre propre matériel.
La configuration d’un serveur Dokku vous permet de démarrer des applications dans des conteneurs isolés sans apprendre toutes les subtilités de la gestion manuelle des conteneurs. Vous pouvez vous concentrer sur l’écriture et la validation du code à l’aide de workflows établis basés sur Git. L’ajout de votre serveur Dokku en tant que télécommande Git signifie que vous pouvez git push
pour déployer vos modifications, soit localement dans votre terminal, soit dans le cadre d’un pipeline CI.
Hadolin
Hadolint est un linter Dockerfile qui vérifie que vos étapes de construction respectent les meilleures pratiques recommandées. L’exécution de Hadolint peut découvrir des problèmes de configuration courants qui rendent vos builds plus lents et moins sécurisés. Hadolint utilise ShellCheck en interne pour également lint les scripts shell dans votre Dockerfile RUN
instructions.
Vous pouvez télécharger Hadolint en tant que binaire précompilé, l’essayer sur le Web ou utiliser sa propre image Docker, hadolint/hadolint
. Démarrez une analyse en fournissant le chemin d’accès à un Dockerfile vers le binaire Hadolint :
hadolint Dockerfile
Hadolint analysera votre fichier Docker à la recherche de problèmes et présentera les résultats dans votre terminal. Certaines des règles groupées incluent la vérification de l’absolu WORKDIR
chemins, mandat unique COPY --from
alias, et ne pas passer à un utilisateur non root avant la fin du Dockerfile. L’exécution régulière d’Hadolint se traduira par des créations d’images plus sûres et plus performantes, conformes aux normes de la communauté.
Résumé
Docker est un excellent outil de développement, mais il s’améliore encore lorsqu’il est associé à d’autres projets populaires. Les initiatives communautaires peuvent renforcer la sécurité de vos images, vous aider à détecter les problèmes dans vos fichiers Docker et fournir des interfaces graphiques polyvalentes pour la gestion de vos conteneurs.
De nouveaux outils apparaissent constamment, il vaut donc la peine de parcourir des sites de partage de code comme GitHub pour découvrir les projets à venir. Le sujet Docker est un bon point de départ pour votre exploration.