Docker a établi la norme pour les logiciels d'emballage en conteneurs légers et portables, tandis qu'OpenShift, la plateforme Kubernetes d'entreprise de Red Hat, fournit l'orchestration, la sécurité et l'outillage de développeur nécessaires pour exécuter ces conteneurs à l'échelle. Ensemble, Docker et OpenShift forment une base solide pour l'orchestration des conteneurs d'entreprise, permettant aux équipes d'automatiser le déploiement, de gérer les environnements hybrides et d'accélérer la livraison des logiciels. Cet article fournit un guide complet pour utiliser Docker avec OpenShift, couvrant l'intégration, les étapes de déploiement, les avantages et les meilleures pratiques pour les environnements de production.

Comprendre le Docker et la Containerization

Docker est plus qu'un simple outil, c'est une plateforme pour développer, expédier et exécuter des applications à l'intérieur des conteneurs. Les conteneurs regroupent une application avec ses dépendances (bibliothèques, fichiers de configuration, binaires) dans une seule unité normalisée. Cela garantit que l'application se comporte de façon cohérente dans les environnements de développement, de mise en scène et de production, éliminant le problème classique « il fonctionne sur ma machine ».

Docker utilise une architecture client-serveur où le client Docker communique avec le démon Docker pour construire, exécuter et gérer les conteneurs. Les images, définies par Dockerfiles, servent de modèles en lecture seule qui sont superposés pour l'efficacité. Lorsqu'un conteneur est démarré, un calque en écriture est ajouté au dessus de l'image. Ce calque permet un déploiement rapide, le contrôle de version et des rrollbacks faciles.

Pour les entreprises, Docker fournit plusieurs capacités essentielles:

  • Isolement: Chaque conteneur fonctionne dans son propre espace utilisateur isolé, améliorant la sécurité et le contrôle des ressources.
  • Portabilité: Les conteneurs fonctionnent sur tout système d'exploitation qui prend en charge Docker, y compris Linux, Windows et macOS, et dans tout environnement (sur site, cloud, hybride).
  • Efficacité: Les conteneurs partagent le noyau du système d'exploitation hôte, ce qui entraîne des frais généraux nettement plus bas que les machines virtuelles.
  • Itération rapide:[ Les développeurs peuvent construire, tester et déployer rapidement des applications conteneurisées, en soutenant l'intégration continue et les flux de travail de livraison continue (CI/CD).

Docker seul, cependant, ne suffit pas pour gérer des centaines ou des milliers de conteneurs à travers un groupe de machines. C'est là que l'orchestration entre en jeu, et OpenShift offre une solution de qualité entreprise construite sur Kubernetes.

OpenShift: Plateforme d'entreprise Kubernetes

OpenShift est la distribution de Kubernetes par Red Hat, enrichie de fonctionnalités supplémentaires qui répondent aux besoins des opérations informatiques, des développeurs et des équipes de sécurité. Kubernetes fournit la couche d'orchestration fondamentale – l'établissement de l'agenda, les déploiements à l'échelle, la gestion du réseau et du stockage – OpenShift l'enroule avec des outils adaptés aux développeurs, une console web, des capacités CI/CD intégrées et des valeurs de sécurité par défaut durcies.

Les principaux composants d'OpenShift sont les suivants:

  • Source-à-Image (S2I): Un outil qui construit automatiquement des images de conteneur à partir du code source sans nécessiter un fichier Docker, bien qu'il supporte également entièrement les fichiers Docker personnalisés.
  • Registre intégré: OpenShift comprend un registre d'images de conteneur interne pour stocker et gérer les images, réduisant ainsi la dépendance à l'égard des registres externes.
  • Route et réseautage:[ OpenShift gère le trafic d'entrée avec un routeur HAProxy intégré et fournit des données internes et des services de découverte.
  • Contraintes de contexte de sécurité (SCC) :[ Ces mesures remplacent les politiques de sécurité de pod Kubernetes, offrant un contrôle granulaire sur ce que les conteneurs peuvent faire (p. ex., fonctionner comme racine, accéder aux ressources de l'hôte).
  • Console de développement:[ Une interface utilisateur Web qui simplifie le déploiement, la surveillance et la gestion des applications.
  • OperatorHub:[ Un catalogue d'opérateurs pour automatiser la gestion complexe du cycle de vie des applications.

OpenShift est conçu pour les entreprises qui nécessitent des logements multiples, la conformité et une grande disponibilité. Il s'intègre avec LDAP, Active Directory et d'autres fournisseurs d'identité. Il fournit également une surveillance intégrée et une exploitation par Prométheus, Grafana et Elasticsearch/Fluentd/Kibana.

Intégration Docker avec OpenShift

L'utilisation de Docker avec OpenShift est simple car OpenShift est construit sur Kubernetes et comprend nativement les images de conteneurs. L'intégration se fait à plusieurs niveaux : construire des images, stocker des images et déployer des charges de travail.

Création d'images

Les développeurs ont deux façons principales de créer des images de conteneur pour OpenShift:

  • Dockerfile construit: Écrire un Dockerfile, puis utiliser le système de construction OpenShift ou le Docker CLI pour construire une image. OpenShift peut exécuter Docker construit à l'intérieur du cluster en utilisant une configuration de construction qui renvoie à un Dockerfile. Cette méthode donne un contrôle complet sur les couches d'image.
  • Source-à-Image (S2I): S2I est un framework qui prend le code source de l'application et l'injecte dans une image de base qui contient l'exécution. Par exemple, une application Node.js peut être construite en pointant OpenShift vers un dépôt Git; OpenShift va tirer l'image de constructeur S2I appropriée, compiler le code et créer une image de conteneur automatiquement. Aucun Dockerfile n'est requis, bien que le résultat final soit une image Docker standard.

Les deux approches produisent des images qui sont stockées dans un registre de conteneurs interne ou externe. Le registre intégré d'OpenShift est basé sur le protocole Docker Registry v2, donc il est entièrement compatible avec les clients Docker.

Stockage des images

Après la construction, les images sont poussées vers un registre accessible par le cluster OpenShift. Le registre interne est l'option la plus simple pour des déploiements étroitement intégrés. Sinon, les équipes peuvent utiliser des registres externes tels que Docker Hub, Quay.io, Amazon ECR ou Google Container Registry. OpenShift peut tirer des images de n'importe quel registre qui supporte le protocole standard d'image conteneur.

Déploiement des charges de travail

Une fois qu'une image est disponible, le déployer sur OpenShift est une question de création d'une ressource Kubernetes telle qu'un Déploiement, DéploiementConfig (Spécifique OpenShift), ou Pod. La console web OpenShift ou CLI () simplifie ce processus. Les développeurs peuvent utiliser l'assistant "Deploy Image" pour sélectionner une image du registre, spécifier les variables d'environnement, les limites de ressources et exposer l'application via une route.

Étape par étape: Déploiement d'un conteneur Docker sur OpenShift

Passons à un cycle de déploiement complet, de l'écriture d'un Dockerfile à l'exposition externe de l'application.

Étape 1: Créer une image Docker

Écrivez un fichier Docker pour votre application. Exemple pour une simple application web Python:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8080
CMD ["python", "app.py"]

Construisez l'image localement en utilisant

Étape 2: Pousser vers un registre

Étiquettez et poussez l'image dans le registre interne d'OpenShift. Tout d'abord, connectez-vous au registre depuis votre client Docker :

docker login -u $(oc whoami) -p $(oc whoami -t) default-route-openshift-image-registry.<cluster-domain>

Puis, tapotez et poussez :

docker tag my-python-app:1.0 default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0
docker push default-route-openshift-image-registry.<cluster-domain>/<project-name>/my-python-app:1.0

Étape 3: Déployer sur OpenShift

Utilisation de l'ICL :

oc new-app my-python-app:1.0 --name=my-app --as-deployment-config

Ou créez un Déploiement manuellement via YAML :

apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-app
spec:
 replicas: 3
 selector:
 matchLabels:
 app: my-app
 template:
 metadata:
 labels:
 app: my-app
 spec:
 containers:
 - image: default-route-openshift-image-registry.<cluster-domain>/<project>/my-python-app:1.0
 name: my-app
 ports:
 - containerPort: 8080

Appliquer avec .

Étape 4: Exposer la demande

Créer un Service et un Route pour rendre l'application accessible à l'extérieur :

oc expose deployment my-app --port=8080
oc expose service my-app

Le routeur d'OpenShift gère la terminaison TLS et l'équilibrage de charge.

Étape 5 : Gérer l'échelle

Écheller dynamiquement le nombre de répliques :

oc scale deployment my-app --replicas=5

Ou configurer l'auto-échelle à l'aide de HorizontalPodAutoscaler.

Avantages de l'utilisation de Docker avec OpenShift

Portabilité et cohérence

Les images Docker sont des artefacts immuables qui encapsulent l'environnement d'exécution. Lorsqu'elles sont déployées sur OpenShift, ces images fonctionnent de la même manière que sur l'ordinateur portable d'un développeur, un groupe de test ou un centre de données de production.

Gestion automatisée du cycle de vie

OpenShift automatise de nombreuses tâches opérationnelles qui sont lourdes avec le Docker brut. Des mises à jour en roulant, des déploiements canari, des contrôles de santé et l'auto-guérison sont intégrés. Par exemple, si un conteneur s'écrase, OpenShift le redémarre automatiquement. Si un noeud échoue, le programmeur redistribue les conteneurs aux nœuds sains.

Sécurité des entreprises

La sécurité est primordiale dans les environnements d'entreprise. OpenShift fait en sorte que les conteneurs fonctionnent sous des contraintes de contexte de sécurité restreinte par défaut. Cela signifie que les conteneurs ne peuvent pas fonctionner comme racine, utiliser des espaces de noms d'hôte ou monter des répertoires d'hôte sensibles sauf autorisation explicite. OpenShift intègre également avec des outils de numérisation de vulnérabilité pour vérifier les images des CVE connus avant le déploiement.

Échelle

OpenShift tire parti de la pod horizontale de Kubernetes pour l'échelle automatique et l'échelle automatique de cluster. Vous pouvez définir des seuils CPU ou mémoire qui déclenchent automatiquement l'échelle ou l'échelle. Combiné avec les conteneurs légers de Docker, l'échelle se produit en quelques secondes plutôt qu'en minutes comme avec les VM.

Productivité des développeurs

La fonction Source-à-Image d'OpenShift accélère le développement en permettant aux développeurs de pousser le code directement au cluster sans écrire Dockerfiles. Le système de construction intégré peut déclencher des compilations et des déploiements automatisés d'images à partir de commits Git, permettant une boucle de rétroaction serrée.

Meilleures pratiques pour le déploiement d'entreprises

Version et marquage des images

Utilisez toujours des balises spécifiques, en version pour vos images Docker. Évitez le tag en production parce qu'il casse la reproductibilité. Utilisez la version sémantique ou commit hashes. Les ressources du flux d'images d'OpenShift peuvent suivre les changements de tags et déclencher des déploiements automatisés.

Politiques de sécurité

Définir les contraintes de sécurité (SCC) qui correspondent à votre posture de sécurité. Commencez par le SCC restreint et n'exacerbez les privilèges que si nécessaire. Intégrez avec des scanners d'image de conteneur comme Clair ou Red Hat Advanced Cluster Security pour analyser les images avant le déploiement.

Intégration CI/CD

Automate construit, teste et déploie en utilisant OpenShift Pipelines (construit sur Tekton) ou Jenkins. Un pipeline typique : (1) le développeur pousse le code vers Git, (2) OpenShift déclenche une construction S2I ou Docker, (3) la nouvelle image est automatiquement poussée vers le registre interne, (4) un déploiement est mis à jour, et (5) les contrôles de santé valident le déploiement.

Exemple d'une ressource de pipeline Tekton qui se construit à partir d'un fichier Docker:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
 name: build-docker-image
spec:
 workspaces:
 - name: source
 steps:
 - name: build
 image: gcr.io/kaniko-project/executor:latest
 args:
 - --context=$(workspaces.source.path)
 - --destination=image-registry.openshift-image-registry.svc:5000/<project>/my-app:$(params.tag)

Surveillance et exploitation forestière

Activer la pile de surveillance intégrée d'OpenShift (Prometheus et Grafana) pour collecter des métriques sur CPU, mémoire, E/S disque et utilisation réseau. Configurer des alertes pour une consommation anormale de ressources. Pour les journaux, déployer l'opérateur OpenShift Elasticsearch ou les journaux vers un SIEM externe. Correler les logs avec des métriques pour une analyse plus rapide de la cause racine.

Gestion des ressources

Définir les demandes et les limites de ressources pour chaque conteneur. OpenShift les utilise pour planifier les pods intelligemment et empêcher la famine des ressources. Sans limites, un conteneur unique peut consommer toutes les ressources de nœuds, affectant d'autres charges de travail.

resources:
 requests:
 memory: "256Mi"
 cpu: "250m"
 limits:
 memory: "512Mi"
 cpu: "500m"

Réseautage et stockage persistant

Pour les applications nécessitant un stockage assimilable, utilisez les versions de stockage persistantes (PVC) d'OpenShift, soutenues par une classe de stockage (par exemple NFS, Ceph, AWS EBS). Configurez les versions de stockage. Pour le réseautage, utilisez OpenShift Routes pour le trafic HTTP/S externe et les services pour l'équilibrage de la charge interne.

Soutien et reprise après sinistre

Sauvegardez régulièrement les configurations OpenShift (instantanés eccd), les données PVC et le contenu du registre d'images. Implémentez une approche Infrastructure as Code en utilisant des outils GitOps comme ArgoCD pour récupérer rapidement les environnements. Testez périodiquement les procédures de récupération après sinistre.

Cas d'utilisations réelles dans le monde

Décomposition des microservices

Les entreprises modernisant des applications monolithiques les brisent souvent en microservices. Les conteneurs Docker hébergent chaque service indépendamment, et OpenShift orchestre l'ensemble du système, gérant la découverte de service, l'équilibrage de charge et la communication inter-service.

Déploiements de nuages hybrides

OpenShift fonctionne sur les principaux fournisseurs de cloud (AWS, Azure, GCP) et sur site. Les images Docker peuvent être déployées partout où OpenShift fonctionne, permettant une expérience cohérente dans les environnements hybrides. Ceci est essentiel pour les organisations ayant des exigences de souveraineté de données ou des stratégies multi-cloud.

IC/CD pour l'apprentissage automatique

Les équipes de Data Science peuvent container les modèles ML en utilisant Docker et les déployer sur OpenShift comme fonctions sans serveur (via OpenShift Serverless/Knative). Cela permet d'inférence du modèle à l'échelle avec une échelle automatique à zéro quand il n'est pas utilisé.

Conclusion

Docker et OpenShift offrent ensemble une plateforme d'orchestration de conteneurs puissante et prête à produire qui répond aux exigences de l'informatique d'entreprise. Docker fournit des images légères et portables faciles à construire et à mettre en forme, tandis qu'OpenShift ajoute l'expérience d'orchestration, de sécurité et de développeur nécessaire pour exécuter ces images à l'échelle avec confiance. En suivant les étapes d'intégration et les meilleures pratiques décrites dans cet article, les organisations peuvent accélérer la livraison de logiciels, améliorer l'utilisation des ressources et maintenir une position de sécurité forte.

Pour plus d'informations, veuillez consulter la documentation officielle : Docker Docs, OpenShift Docs et Red Hat OpenShift Product Page.