Skip to content

Docker, Devops & Platform Engineering

Le rôle de Docker peut s'étendre à la fois dans le domaine du DevOps et du Platform Engineering, mais il est utilisé avec des objectifs légèrement différents selon le contexte.

Docker dans la culture DevOps

  • Automatisation et déploiement

Docker est un outil clé pour automatiser la création, le test et le déploiement des applications. En DevOps, il est utilisé pour normaliser les environnements de développement, de test et de production, facilitant ainsi les pratiques CI/CD (Intégration Continue et Déploiement Continu).

  • Portabilité des applications

Docker permet aux équipes DevOps de packager les applications et leurs dépendances dans des conteneurs, garantissant ainsi qu'elles fonctionnent de manière cohérente dans différents environnements, ce qui est crucial dans un cycle de vie logiciel agile.

  • Collaboration entre équipes

En standardisant l'environnement d'exécution, Docker simplifie la collaboration entre les développeurs et les équipes opérationnelles (Ops), car tout le monde travaille dans des conditions uniformes.

Docker & Platform Engineering

  • Abstraction de l'infrastructure

Dans le Platform Engineering, Docker est utilisé pour créer des plateformes auto-suffisantes et flexibles sur lesquelles les développeurs peuvent déployer des applications sans se soucier de l'infrastructure sous-jacente. Standardisation des plateformes : Les équipes de platform engineering peuvent utiliser Docker pour construire et gérer des plateformes cloud-native qui offrent aux développeurs un environnement prêt à l'emploi, basé sur des conteneurs orchestrés (par exemple avec Kubernetes).

Optimisation des ressources

En utilisant Docker, les équipes Platform Engineering optimisent l'allocation des ressources, en permettant à plusieurs applications ou services de tourner sur la même infrastructure tout en étant isolés dans des conteneurs.

Les avantages dans ce contexte

  • Réduction des temps de livraison grâce à l’industrialisation

Docker permet de standardiser les environnements de développement, de test et de production, ce qui réduit considérablement les erreurs dues aux différences entre ces environnements. Cette uniformisation facilite l'automatisation des processus de livraison et permet de déployer des applications plus rapidement.

  • Des déploiements réguliers

Grâce à la conteneurisation, Docker rend les applications plus modulaires et portables. Les équipes peuvent donc effectuer des déploiements réguliers, même sur des infrastructures complexes, sans crainte de conflits liés aux dépendances ou aux environnements. Docker permet de configurer des pipelines de livraison continue (CI/CD) qui automatisent le déploiement, garantissant ainsi des mises à jour fréquentes et fiables.

  • Mise en place de tests unitaires, d’intégration, etc

Avec Docker, les environnements de tests peuvent être reproduits à l’identique, garantissant que les tests unitaires et d’intégration se déroulent dans des conditions identiques à celles de la production. Cela améliore la qualité du code et minimise les risques de bogues lors des mises en production.

  • Amélioration continue

Docker s'intègre parfaitement aux pratiques d'amélioration continue en facilitant les itérations rapides. Les développeurs peuvent tester de nouvelles versions, effectuer des ajustements, et déployer des mises à jour de manière fluide. L’infrastructure et les pipelines d’automatisation permettent d’améliorer les performances et la stabilité des applications en permanence.

  • Industrialisation des processus

Docker facilite l’industrialisation en intégrant plusieurs pratiques clés :

Provisionning : Avec Docker, les services et applications peuvent être déployés rapidement grâce à des conteneurs qui incluent toutes les dépendances nécessaires. Cela permet un provisioning rapide et automatisé des environnements.

Infrastructure As Code (IaC) : Docker fonctionne souvent avec des outils d’infrastructure as code comme Terraform ou Ansible. L'utilisation de Docker pour gérer des infrastructures conteneurisées simplifie la gestion des environnements à grande échelle et rend le déploiement d’applications plus fiable et reproductible.

CI/CD (Intégration Continue / Déploiement Continu) : Docker est un outil central dans les pipelines CI/CD. Il permet de créer des environnements isolés pour chaque étape du développement, que ce soit les tests, la validation ou le déploiement, garantissant une livraison continue et sans interruption.

  • Observabilité et monitoring

Docker fournit des outils permettant d’assurer une observabilité accrue des applications conteneurisées. Grâce à des solutions comme Prometheus, Grafana, ou encore l'intégration de logs via des outils comme ELK (Elasticsearch, Logstash, Kibana), les équipes peuvent surveiller l'état des conteneurs, identifier les problèmes de performance, et réagir rapidement aux incidents. Cela contribue à une meilleure gestion des ressources et à une stabilité accrue des services.

Un peu de workflow

Vms vs containers

Les microservices

Grâce à Docker on peut facilement envisager de déployer une architecture dont voici les principaux avantages :

On retiendra surtout que Docker n'introduit pas d'overhead (temps passé par un système à ne rien faire d'autre que de se gérer), améliorant de ce fait les performances.

  • Découpage de l'application en processus (services) indépendants
  • Chaque microservice est responsable de sa couche métier
  • Le découpage du développement peut se faire par équipe, chacune ayant en charge une brique métier
  • Par essence les microservices permettent de mixer différentes technologies ce qui permet notamment de remplacer un container développé en Python par un container plus performant, développé en GOlang par exemple
  • La scalabilité des microservices est horizontale. Chaque service étant indépendant, il est facile d'ajuster les perfomances de l'infrastructure
  • L'ajout de fonctionnalités est simplifiée

Malgré tout ce type d'infrastructure engendre des inconvénients :

Microservices