Conteneurs comme fondement de la collaboration DevOpsContainers as the foundation for DevOps collaboration

Compte tenu de la nature-même des conteneurs et de la technologie Docker, les développeurs peuvent facilement partager leurs logiciels et leurs dépendances avec le personnel informatique et des environnements de production tout en éliminant l’excuse classique « Ça fonctionne sur ma machine ».By the very nature of the containers and Docker technology, developers can share their software and dependencies easily with IT operations and production environments while eliminating the typical "it works on my machine" excuse. Les conteneurs résolvent les conflits d’applications entre les différents environnements.Containers solve application conflicts between different environments. Indirectement, les conteneurs et Docker rapprochent les développeurs et le personnel informatique, en facilitant leur collaboration efficace.Indirectly, containers and Docker bring developers and IT operations closer together, making it easier for them to collaborate effectively. Adopter le workflow de conteneur offre à de nombreux clients la continuité DevOps qu’ils recherchaient mais qu’ils devaient auparavant implémenter par le biais d’une configuration plus complexe pour les pipelines de mise en production et de build.Adopting the container workflow provides many customers with the DevOps continuity they've sought but previously had to implement via more complex configuration for release and build pipelines. Les conteneurs simplifient les pipelines de build/test/déploiement dans DevOps.Containers simplify the build/test/deploy pipelines in DevOps.

Diagramme montrant la propriété du cycle de vie d’une application de station d’accueil.

Figure 2-1.Figure 2-1. Charges de travail principales par « personne » dans le cycle de vie des applications Docker conteneuriséesMain workloads per "personas" in the life cycle for containerized Docker applications

Avec les conteneurs Docker, les développeurs possèdent ce qui se trouve dans le conteneur (application, service et dépendances aux frameworks et composants) et déterminent la façon dont les conteneurs et services se comportent ensemble comme une application composée d’une collection de services.With Docker containers, developers own what's within the container (application and service, and dependencies to frameworks and components) and how the containers and services behave together as an application composed by a collection of services. Les interdépendances des différents conteneurs sont définies dans un fichier docker-compose.yml ou ce qui pourrait être appelé manifeste de déploiement.The interdependencies of the multiple containers are defined in a docker-compose.yml file, or what could be called a deployment manifest. Entre temps, les équipes informatiques (professionnels de l’informatique et gestion informatique) peuvent se concentrer sur la gestion des environnements de production, l’infrastructure, la scalabilité, la supervision et enfin la garantie que les applications sont fournies correctement aux utilisateurs finaux, sans avoir à connaître le contenu des différents conteneurs.Meanwhile, IT operations teams (IT professionals and management) can focus on the management of production environments; infrastructure; scalability; monitoring; and, ultimately, ensuring that the applications are delivering properly for the end users, without having to know the contents of the various containers. D’où le nom « conteneur », qui rappelle l’analogie avec les conteneurs de transport du monde réel.Hence, the name "container," recalling the analogy to real-world shipping containers. Par conséquent, les propriétaires du contenu d’un conteneur n’ont pas à se préoccuper de la façon dont le conteneur sera expédié, tandis que la société de transport achemine un conteneur de son point d’origine jusqu’à sa destination sans connaître le contenu ou sans s’y intéresser.Thus, the owners of a container's content need not concern themselves with how the container will be shipped, and the shipping company transports a container from its point of origin to its destination without knowing or caring about the contents. De la même façon, les développeurs peuvent créer et posséder le contenu d’un conteneur Docker sans avoir à se préoccuper des mécanismes de « transport ».In a similar manner, developers can create and own the contents within a Docker container without the need to concern themselves with the "transport" mechanisms.

Dans la colonne de gauche de la figure 2-1, les développeurs écrivent et exécutent le code localement dans des conteneurs Docker à l’aide de Docker pour Windows ou Mac.In the pillar on the left side of Figure 2-1, developers write and run code locally in Docker containers by using Docker for Windows or Mac. Ils définissent l’environnement d’exploitation pour le code à l’aide d’un fichier Dockerfile qui spécifie le système d’exploitation de base à exécuter, ainsi que les étapes de build pour la génération de leur code dans une image Docker.They define the operating environment for the code by using a Dockerfile that specifies the base operating system to run as well as the build steps for building their code into a Docker image. Les développeurs définissent la façon dont une ou plusieurs images interagiront à l’aide du manifeste de déploiement de fichier docker-compose.yml mentionné précédemment.The developers define how one or more images will interoperate using the aforementioned docker-compose.yml file deployment manifest. Une fois qu’ils ont terminé leur développement local, ils poussent (push) leur code d’application en plus des fichiers de configuration Docker vers le dépôt de code de leur choix (autrement dit, le dépôt Git).As they complete their local development, they push their application code plus the Docker configuration files to the code repository of their choice (that is, Git repository).

La colonne DevOps définit les pipelines de build/d’intégration continue (CI) à l’aide du fichier Dockerfile fourni dans le dépôt de code.The DevOps pillar defines the build–Continuous Integration (CI) pipelines using the Dockerfile provided in the code repository. Le système d’intégration continue (CI) extrait les images conteneur de base du registre Docker sélectionné et génère les images Docker personnalisées pour l’application.The CI system pulls the base container images from the selected Docker registry and builds the custom Docker images for the application. Les images sont alors validées et poussées (push) vers le registre Docker utilisé pour les déploiements sur plusieurs environnements.The images then are validated and pushed to the Docker registry used for the deployments to multiple environments.

Dans la colonne de droite, les équipes d’exploitation gèrent en production les applications et l’infrastructure déployées tout en supervisant l’environnement et les applications afin de pouvoir fournir des commentaires et des insights à l’équipe de développement sur la façon dont l’application peut être améliorée.In the pillar on the right, operations teams manage deployed applications and infrastructure in production while monitoring the environment and applications so that they can provide feedback and insights to the development team about how the application might be improved. Les applications de conteneur sont généralement exécutées en production à l’aide d’orchestrateurs de conteneur.Container apps are typically run in production using container orchestrators.

Les deux équipes collaborent par le biais d’une plateforme fondamentale (conteneurs Docker) qui fournit de manière contractuelle une séparation des responsabilités, tout en améliorant considérablement la collaboration des deux équipes dans le cycle de vie des applications.The two teams are collaborating through a foundational platform (Docker containers) that provides a separation of concerns as a contract, while greatly improving the two teams' collaboration in the application life cycle. Les développeurs possèdent le contenu du conteneur, son environnement d’exploitation et ses interdépendances, tandis que les équipes d’exploitation prennent les images générées ainsi que le manifeste et les exécutent dans leur système d’orchestration.The developers own the container contents, its operating environment, and the container interdependencies, whereas the operations teams take the built images along with the manifest and runs them in their orchestration system.

Défis liés au cycle de vie des applications lors de l’utilisation de DockerChallenges in application life cycle when using Docker.

Nombreuses sont les raisons pour lesquelles le nombre d’applications conteneurisées augmentera dans les années à venir, et l’une d’elles est la création d’applications basées sur des microservices.There are many reasons that will increase the number of containerized applications in the upcoming years, and one of these reasons is the creation of applications based on microservices.

Au cours des 15 dernières années, l’utilisation de services web a été la base de milliers d’applications, et d’ici quelques années, nous ferons probablement le même constat avec les applications basées sur des microservices s’exécutant sur des conteneurs Docker.During the last 15 years, the use of web services has been the base of thousands of applications, and probably, after a few years, we'll find the same situation with microservice-based applications running on Docker containers.

Il est également important de mentionner que vous pouvez aussi utiliser des conteneurs Docker pour les applications monolithiques, auquel cas vous profitez toujours de la plupart des avantages de Docker.It is also worth to mention that you can also use Docker containers for monolithic applications and you still get most of the benefits of Docker. Les conteneurs ne ciblent pas uniquement des microservices.Containers are not targeting only microservices.

L’utilisation de la conteneurisation de Docker et de microservices donne lieu à de nouveaux défis dans le processus de développement de vos organisations. Par conséquent, vous avez besoin d’une stratégie solide pour maintenir de nombreux conteneurs et microservices en cours d’exécution sur des systèmes de production.The use of Docker containerization and microservices causes new challenges in the development process of your organizations and therefore, you need a solid strategy to maintain many containers and microservices running on production systems. Finalement, les applications d’entreprise auront des centaines, voire des milliers de conteneurs/d’instances s’exécutant en production.Eventually, enterprise applications will have hundreds or thousands of containers/instances running in production.

Ces défis créent de nouvelles demandes lors de l’utilisation d’outils DevOps. Vous devez donc définir de nouveaux processus dans vos activités DevOps et trouver des réponses à ce type de questions :These challenges create new demands when using DevOps tools, so you'll have to define new processes in your DevOps activities, and find answers for this type of questions:

  • Quels outils utiliser pour le développement, l’intégration continue/le déploiement continu (CI/CD), la gestion et les exploitations ?Which tools can I use for development, for CI/CD, management and operations?

  • Comment mon entreprise peut gérer les erreurs dans des conteneurs lors de l’exécution en production ?How can my company manage errors in containers when running in production?

  • Comment changer des parties de nos logiciels en production avec un temps d’arrêt minimal ?How can we change pieces of our software in production with minimum downtime?

  • Comment effectuer une mise à l’échelle et comment superviser notre système de production ?How can we scale and how can we monitor our production system?

  • Comment inclure le test et le déploiement de conteneurs dans notre pipeline de mise en production ?How can we include testing and deployment of containers in our release pipeline?

  • Comment utiliser des outils/plateformes open source pour les conteneurs dans Microsoft Azure ?How can we use Open Source tools/platforms for containers in Microsoft Azure?

Si vous pouvez répondre à toutes ces questions, vous serez mieux préparé pour déplacer vos applications (existantes ou nouvelles) vers des conteneurs Docker.If you can answer all those questions, you'll be better prepared to move your applications (existing or new apps) to Docker containers.

Introduction à un workflow de cycle de vie d’application Docker de bout en bout génériqueIntroduction to a generic end-to-end Docker application life cycle workflow

La figure 2-2 présente un workflow plus détaillé d’un cycle de vie d’application Docker, en s’intéressant particulièrement, dans cet exemple, à des activités et ressources DevOps spécifiques.Figure 2-2 presents a more detailed workflow for a Docker application life cycle, focusing in this instance on specific DevOps activities and assets.

Diagramme montrant le cycle de vie générique de bout en bout d’une application Dockr.

Figure 2-2.Figure 2-2. Workflow général du cycle de vie d’application conteneurisée DockerHigh-level workflow for the Docker containerized application life cycle

Tout commence par le développeur, qui démarre l’écriture de code dans le workflow de la boucle interne.Everything begins with the developer, who starts writing code in the inner-loop workflow. L’étape de la boucle interne est celle où les développeurs définissent tout ce qui se produit avant de pousser (push) le code vers le dépôt de code (par exemple, un système de gestion du code source comme Git).The inner-loop stage is where developers define everything that happens before pushing code into the code repository (for example, a source control system such as Git). Une fois la validation effectuée, le dépôt déclenche l’intégration continue (CI) et le reste du workflow.After it's committed, the repository triggers Continuous Integration (CI) and the rest of the workflow.

La boucle interne se compose essentiellement d’étapes classiques comme « code » (coder), « run » (exécuter), « test » (tester) et « debug » (déboguer), ainsi que des étapes supplémentaires nécessaires juste avant d’exécuter l’application localement.The inner loop basically consists of typical steps like "code," "run," "test," and "debug," plus the additional steps needed right before running the app locally. L’exécution et le test de l’application en tant que conteneur Docker font partie du processus du développeur.This is the developer's process to run and test the app as a Docker container. Le workflow de la boucle interne est expliqué dans les sections qui suivent.The inner-loop workflow will be explained in the sections that follow.

Si nous prenons un peu de recul pour examiner le workflow de bout en bout, le workflow DevOps est plus qu’une technologie ou qu’un jeu d’outils : il s’agit d’un état d’esprit qui nécessite une évolution culturelle.Taking a step back to look at the end-to end workflow, the DevOps workflow is more than a technology or a tool set: it's a mindset that requires cultural evolution. Il s’agit de personnes, de processus et des outils appropriés permettant rendre le cycle de vie de votre application plus rapide et plus prévisible.It's people, processes, and the appropriate tools to make your application life cycle faster and more predictable. Les entreprises qui adoptent un workflow conteneurisé restructurent généralement leurs organisations pour représenter les personnes et les processus qui correspondent à des workflows conteneurisés.Enterprises that adopt a containerized workflow typically restructure their organizations to represent people and processes that match the containerized workflow.

L’utilisation de DevOps peut aider les équipes à répondre ensemble plus rapidement aux pressions concurrentielles en remplaçant les processus manuels sujets aux erreurs par une automatisation, ce qui se traduit par une meilleure traçabilité et des workflows reproductibles.Practicing DevOps can help teams respond faster together to competitive pressures by replacing error-prone manual processes with automation, which results in improved traceability and repeatable workflows. Les organisations peuvent également gérer plus efficacement les environnements et réduire leurs coûts en combinant des ressources locales et cloud, ainsi que des outils solidement intégrés.Organizations also can manage environments more efficiently and realize cost savings with a combination of on-premises and cloud resources as well as tightly integrated tooling.

Quand vous implémenterez votre workflow DevOps pour les applications Docker, vous verrez que les technologies de Docker sont présentes à presque toutes les étapes du workflow, à partir de votre espace de développement quand vous travaillez dans la boucle interne (coder, exécuter, déboguer), la phase de build-test-CI et, enfin, le déploiement de ces conteneurs dans des environnements de préproduction et de production.When implementing your DevOps workflow for Docker applications, you'll see that Docker technologies are present in almost every stage of the workflow, from your development box while working in the inner loop (code, run, debug), the build-test-CI phase, and, finally, the deployment of those containers to the staging and production environments.

L’amélioration des pratiques concernant la qualité permettent d’identifier les erreurs tôt dans le cycle de développement, ce qui réduit les coûts liés à leur résolution.Improvement of quality practices helps to identify defects early in the development cycle, which reduces the cost of fixing them. En incluant l’environnement et les dépendances dans l’image et en adoptant une philosophie du déploiement de la même image sur plusieurs environnements, vous encouragez une rigueur consistant à extraire les configurations spécifiques à l’environnement, ce qui rend les déploiements plus fiables.By including the environment and dependencies in the image and adopting a philosophy of deploying the same image across multiple environments, you promote a discipline of extracting the environment-specific configurations making deployments more reliable.

Les données enrichies obtenues par le biais d’une instrumentation efficace (supervision et diagnostics) fournissent des insights sur les problèmes de performances et le comportement des utilisateurs pour orienter les futurs investissements et priorités.Rich data obtained through effective instrumentation (monitoring and diagnostics) provides insight into performance issues and user behavior to guide future priorities and investments.

DevOps doit être considéré comme un parcours, pas comme une destination.DevOps should be considered a journey, not a destination. Il doit être implémenté de façon incrémentielle par le biais de projets bien délimités à partir desquels vous pouvez réussir, apprendre et évoluer.It should be implemented incrementally through appropriately scoped projects from which you can demonstrate success, learn, and evolve.

Avantages de DevOps pour les applications conteneuriséesBenefits of DevOps for containerized applications

Voici quelques-uns des principaux avantages fournis par un workflow DevOps solide :Here are some of the most important benefits provided by a solid DevOps workflow:

  • Fournir des logiciels de meilleure qualité, plus rapides et offrant une meilleure conformité.Deliver better-quality software, faster and with better compliance.

  • Procéder à une amélioration et à des ajustements continus plus tôt et d’une manière plus rentable.Drive continuous improvement and adjustments earlier and more economically.

  • Augmenter la transparence et la collaboration entre les parties prenantes impliquées dans la fourniture et l’exploitation des logiciels.Increase transparency and collaboration among stakeholders involved in delivering and operating software.

  • Contrôler les coûts et utiliser plus efficacement les ressources provisionnées tout en réduisant les risques de sécurité.Control costs and utilize provisioned resources more effectively while minimizing security risks.

  • Affecter une connexion de type « plug and play » correcte à un grand nombre de vos investissements DevOps existants, notamment les investissements en open source.Plug and play well with many of your existing DevOps investments, including investments in open-source.