Aucun résultat trouvé

Votre recherche n’a donné aucun résultat.

Nous vous suggérons d’essayer ce qui suit pour trouver ce que vous recherchez :

  • Vérifiez l’orthographe de votre recherche par mot clé.
  • Utilisez des synonymes pour le mot clé que vous avez tapé, par exemple, essayez “application” au lieu de “logiciel”.
  • Essayez l’une des recherches populaires ci-dessous.
  • Lancer une nouvelle recherche.
Questions tendances

Conteneurs Docker et Container Cloud Services

Un conteneur est un format d’empaquetage qui regroupe tout le code et les dépendances d’une application dans un format standard, qui permet une exécution rapide et fiable dans l’ensemble des environnements informatiques. Un conteneur Docker est un conteneur exécutable léger, automome et populaire qui comprend tous les éléments nécessaires pour exécuter une application, notamment les bibliothèques, les outils système, le code et l'exécution. Docker est également une plate-forme logicielle qui permet aux développeurs de créer, tester et déployer rapidement des applications conteneurisées.

Containers as a Service (CaaS) ou Container Services sont des services cloud gérés qui gèrent le cycle de vie des conteneurs. Les services de Container aident à orchestrer (démarrer, arrêter, redimensionner) l'exécution des conteneurs. Grâce aux services de conteneurs, vous pouvez simplifier, automatiser et accélérer le développement et le cycle de vie de votre application.

Docker et Container Services ont connu une adoption rapide et ont connu un énorme succès au cours des dernières années. D'une technologie open source presque inconnue et plutôt technique en 2013, Docker a évolué pour devenir un environnement d’exécution standardisé désormais officiellement pris en charge pour de nombreux produits Oracle Enterprise.

Qui utilise Docker?

Docker est une structure de développement d'application ouverte conçue pour bénéficier à DevOps et aux développeurs. Grâce à Docker, les développeurs peuvent créer, packager, livrer et exécuter des applications en toute simplicité, sous forme de conteneurs légers, portables et autonomes, qui peuvent fonctionner pratiquement n’importe où. Les conteneurs permettent aux développeurs d'emballer une application avec toutes ses dépendances et de la déployer en une seule unité. En fournissant des conteneurs d'applications prédéfinis et autonomes, les développeurs peuvent se concentrer sur le code de l'application et l'utilisation sans se soucier du système d'exploitation sous-jacent ou du système de déploiement.

En outre, les développeurs peuvent tirer parti de milliers d'applications de conteneur open source qui sont déjà conçues pour être exécutées dans un conteneur Docker. Pour les équipes de DevOps, Docker se prête à l'intégration et au développement continus d'un ensemble d'outils et réduit les contraintes et la complexité nécessaires au sein de leur architecture système pour déployer et gérer les applications. Avec l’introduction des services cloud d’orchestration de conteneurs, tout développeur peut développer des applications conteneurisées localement dans son environnement de développement, puis déplacer et exécuter ces applications conteneurisées en production vers des services cloud, tels que les services Kubernetes gérés.

Docker versus Kubernetes

Les conteneurs Linux existent depuis 2008, mais ils n'étaient pas très connus avant l'émergence des conteneurs Docker en 2013. Avec l'avènement des conteneurs Docker a surgi l'engouement pour le développement et déploiement d'applications conteneurisées. Au fur et à mesure que le nombre d'applications conteneurisées a augmeté pour couvrir des centaines de conteneurs déployés sur de multiples serveurs, les faire fonctionner est devenu plus complexe. Comment coordonner, faire évoluer, gérer et programmer des centaines de conteneurs? Kubernetes peut aider dans cette tâche. Kubernetes est un système d'orchestration open source qui vous permet d'exécuter vos conteneurs Docker et vos charges de travail. Il aide à gérer les aspects complexes du fonctionnement lors du passage à l’échelle de plusieurs conteneurs déployés sur plusieurs serveurs. Le moteur Kubernetes orchestre automatiquement le cycle de vie du conteneur, en répartissant les conteneurs d’applications sur l’ensemble de l’infrastructure d’hébergement. Kubernetes peut rapidement augmenter ou diminuer les ressources en fonction de la demande. Il provisionne, planifie, supprime et surveille en permanence l’intégrité des conteneurs.

Données de base Docker

Les concepts de base de Docker sont des images et des conteneurs. Une image Docker contient tout ce qui est nécessaire pour exécuter votre logiciel : le code, une exécution (par exemple Java Virtual Machine (JVM), des pilotes, des outils, des scripts, des bibliothèques, des déploiements, etc.

Un conteneur Docker est une instance en cours d’exécution d’une image Docker. Cependant, contrairement à la virtualisation classique avec un hyperviseur de type 1 ou de type 2, un conteneur Docker s’exécute sur le noyau du système d’exploitation hôte. Dans une image Docker, il n'existe aucun système d'exploitation distinct, comme l'illustre l'image 1.

image de base docker
Image 1

Isolation vs virtualisation

Chaque conteneur Docker possède son propre système de fichiers, sa propre pile réseau (et par conséquent sa propre adresse IP), son propre espace de traitement et des limitations de ressources définies pour l'unité centrale de traitement et la mémoire. Puisqu’un conteneur Docker n’a pas besoin de démarrer un système d’exploitation, il démarre instantanément. Docker s’appuie sur l’isolement, qui consiste à séparer les ressources d’un système d’exploitation hôte, par opposition à la virtualisation , qui consiste à offrir un système d’exploitation invité au-dessus du système d’exploitation hôte.

VM ou Kubernetes - Infrastructure de déploiement
Image système de fichiers incrémentiel
Image 2

Système de fichiers incrémentiel

Le système de fichiers d’une image Docker est organisé en couches, avec une sémantique de copie sur écriture. Il permet l’héritage et la réutilisation, l’économie des ressources sur le disque, ainsi que le téléchargement incrémentiel d’images.

Comme le montre la deuxième illustration, une image Docker avec un déploiement Weblogic pourrait être basée sur une image avec un domaine Oracle WebLogic Server, qui pourrait être basée sur une image Weblogic, qui est basée sur une image Java Development Kit (JDK), qui à son tour est basée sur une image de base Oracle Linux.

Registre Docker

Bien que les images Docker soient faciles à créer et que les développeurs apprécient leur simplicité et leur portabilité, ils ont rapidement découvert que la gestion de milliers d’images Docker était très difficile. Docker Registry répond à ce défi. Docker Registry est un moyen ordinaire de stocker et de distribuer des images Docker. Le registre est un référentiel open source sous licence d’autorisation Apache.

Le registre Docker permet également d’améliorer le contrôle d’accès et la sécurité des images Docker stockées dans son référentiel. Il gère la distribution des images et peut également s’intégrer aux flux de travail de développement d’applications. Les développeurs peuvent configurer leur propre registre Docker, ou utiliser un service de registre Docker hébergé tel que Docker Hub, Oracle Container Registry, Azure Container Registry, etc.

Docker Hub est un registre Docker hébergé géré par Docker. Docker Hub contient plus de 100 000 images de conteneurs provenant d’éditeurs de logiciels, de projets open source et de la communauté. Docker Hub contient des logiciels et des applications provenant de référentiels officiels tels que Nginx, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu et Oracle Linux.

Lorsque vous démarrez un conteneur, Docker extraira automatiquement par défaut l’image correspondante du Docker Hub public si elle n’est pas disponible localement. De plus, vous pouvez également créer vos propres images et les pousser vers Docker Hub dans un référentiel public ou privé.

Figure 3: capture d'écran Docker Registry
Image 3

Docker en tant que moteur d’exécution de microservices

L’idée de découper des applications monolithiques en petites parties de microservices est actuellement très répandue parmi les développeurs de logiciels.

Les microservices sont déployés indépendamment en tant que processus, utilisent des protocoles légers pour communiquer entre eux et chaque service possède ses données [7]. Étant donné que les microservices adoptent une approche de gouvernance décentralisée, ils nécessitent une quantité assez élevée d’automatisation de l’infrastructure, de tests automatisés, de pipelines de CD entièrement automatisés et d’équipes DevOps compétentes et agiles.

Ce style architectural ne fait pas l’unanimité, mais il serait naïf de supposer qu’une application décomposée en microservices peut fonctionner simplement comme un ensemble de processus. Pour ne citer que quelques exigences, un microservice doit être indépendant de l’hôte et isolé au niveau du système d’exploitation. Il doit fonctionner dans les limites de ses ressources, doit être augmenté ou réduit, redémarré en cas d’échec, et découvert et connecté à d’autres microservices via une couche réseau définie par logiciel.

Par conséquent, exécuter un microservice dans un conteneur Docker est un excellent point de départ pour atteindre la plupart de ces objectifs.

Docker — Deux dimensions clés

Docker transforme la façon dont nous construisons, livrons et exécutons des logiciels dans deux dimensions différentes :

  • Il permet de mener des applications du développement à la production en toute fiabilité.
  • Il offre un format d’image de référentiels pour passer du modèle sur site au cloud.

Les deux dimensions sont présentées en détail dans les paragraphes suivants.

Image Docker - Du développement à la production

Créer une image Docker avec toutes ses dépendances résout le problème "mais cela a fonctionné pour moi sur ma machine de développement". Le principe est qu’une image Docker est créée automatiquement par un pipeline de construction à partir d’un référentiel de code source comme Git et initialement testée dans un environnement de développement. Cette image immuable sera ensuite stockée dans un registre Docker.

Comme le montre la figure 4, cette même image est utilisée pour des tests de charge, d’intégration, d’acceptation, etc. Dans chaque environnement, la même image sera utilisée. Des différences mineures mais nécessaires spécifiques à l’environnement, comme une URL JDBC pour une base de données de production, peuvent être introduites dans le conteneur sous forme de variables d’environnement ou de fichiers.

capture d'écran d'image docker
Image 4

Les statistiques montrent que 65 % de tous les cas d’utilisation actuels de Docker entrent dans le cadre du développement, et 48 % utilisent Docker pour l’intégration continue [5].

Du modèle sur site au cloud

Docker a transformé l’adoption des clouds publics : d’une part, avec une image Docker, pour la première fois dans l’histoire, il existe un format de package commun qui peut être exécuté sur site ainsi que sur tous les principaux fournisseurs cloud. Les conteneurs Docker fonctionnent sur mon ordinateur portable de la même manière que sur Oracle Cloud.

D’autre part, puisque les conteneurs Docker fonctionnent sur tous les grands clouds publics, ils contribuent à démentir un préjugé de longue date concernant les clouds publics : la dépendance à un fournisseur. Tous les grands fournisseurs cloud proposent désormais Docker en tant que PaaS.

Versions de Docker — Maturité de la technologie sous-jacente

Le rythme des versions de Docker est beaucoup plus rapide que le cycle de publication des logiciels d’entreprise traditionnels. Parfois, le rythme effréné des versions Docker, associé à la nouveauté du projet Docker, engendre des inquiétudes quant à la sécurité et à la stabilité de Docker.

Bien que Docker et sa ligne de commande, le daemon Docker, son API et des outils tels que Docker Swarm, Docker Machine et Docker Compose n’ont évolué qu’au cours des trois dernières années, les fonctionnalités de noyau Linux sous-jacentes sont disponibles dans chaque noyau Linux depuis près d’une décennie.

Google est un exemple marquant d’un des premiers utilisateurs de la technologie des conteneurs. Google utilisait les conteneurs Linux avant même que Docker n’existe. De plus, Google exécute tout dans un conteneur. Selon les estimations, Google démarre 2 milliards de conteneurs par semaine [3].

Historique des cgroups et des espaces de noms

Les fonctionnalités du noyau Linux sous-jacentes utilisées par Docker sont les cgroups (groupes de contrôle) et les espaces de noms. En 2008, les cgroups ont été introduits dans le noyau Linux sur la base du travail précédemment effectué par les développeurs Google [1]. Ils limitent et tiennent compte de l’utilisation des ressources d’un ensemble de processus du système d’exploitation.

Le noyau Linux utilise un espace de noms pour isoler les ressources système des processus les unes par rapport aux autres. Le premier espace de noms, c’est-à-dire l’espace de noms de montage, a vu le jour en 2002.

Container Cloud Services

La première partie de cet article expliquait quelques concepts importants concernant Docker. Cependant, dans un environnement de production, il ne suffit pas d’exécuter une application dans un conteneur Docker.

La configuration et le fonctionnement d’un environnement de production nécessitent du matériel pour exécuter les conteneurs. Les logiciels tels que Docker, ainsi que les référentiels et les gestionnaires de clusters, doivent être installés, mis à niveau et corrigés. Si plusieurs conteneurs Docker communiquent entre les hôtes, un réseau doit être créé. Les conteneurs en cluster doivent être redémarrés en cas d’échec. En outre, un ensemble de conteneurs reliés entre eux doit être aussi facile à déployer qu’une instance unique d’application logique. Prenons l’exemple d’un équilibreur de charge, quelques serveurs web, des instances Oracle WebLogic Server avec un serveur d’administration, un serveur géré et une base de données. Gérer les applications en conteneur à grande échelle nécessite un système d’orchestration de conteneurs comme Kubernetes ou Docker Swarm. Le déploiement, la gestion et l’exploitation de systèmes d’orchestration tels que Kubernetes peuvent être difficiles et chronophages.

Pour faciliter la création d’applications en conteneur et la rendre plus efficace pour les développeurs, les fournisseurs cloud proposent des services de conteneur cloud ou Containers as a Service (CaaS). Les services de conteneur cloud aident les développeurs et les équipes opérationnelles à rationaliser et à gérer le cycle de vie des conteneurs de manière automatisée. Ces services d’orchestration, généralement créés avec Kubernetes, permettent aux équipes DevOps de gérer et d’exploiter plus facilement des applications en conteneur à grande échelle. Oracle Container Engine for Kubernetes et Azure Kubernetes Service sont deux exemples de services cloud gérés par l’orchestration de conteneurs plébiscités.

Oracle Container Engine for Kubernetes est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications en conteneur dans le cloud. Utilisez Container Engine for Kubernetes (parfois abrégé en OKE) lorsque votre équipe de développement souhaite créer, déployer et gérer de manière fiable les applications cloud natives.

Images Docker d’Oracle —Vous trouverez ci-dessous quelques sources pour obtenir ou créer des images Docker pour les produits Oracle. Le référentiel Oracle GitHub pour les images Docker contient des fichiers Docker et des exemples pour créer des images Docker pour les produits commerciaux Oracle et les projets open source sponsorisés par Oracle.

Atelier pratique Docker — Développement en conteneur avec Docker

Références

  1. Cgroups (Wikipédia)
  2. Espaces de noms Linux (Wikipédia)
  3. TOUT chez Google s’exécute dans un conteneur, par Jack Clark
  4. Docker Hub atteint 5 milliards de tirages
  5. Évolution des logiciels de supply chain modernes, Docker Survey 2016
  6. MOS Doc ID 2216342.1 : Prise en charge de Docker pour Oracle DB
  7. Microservices, par Martin Fowler
  8. Oracle Container Engine et démo du registre (3:13)
  9. Documentation de Container Engine for Kubernetes