Table des matières
Étapes clés:
Exemple Dockerfile :
2. Déploiement à Kubernetes
Exemple deployment.yaml :
Exemple service.yaml (pour exposer l'application):
3. Meilleures pratiques pour Java dans les conteneurs
Considérations importantes:
Maison Java javaDidacticiel Conteneurisation des applications Java avec Docker et Kubernetes

Conteneurisation des applications Java avec Docker et Kubernetes

Jul 30, 2025 am 01:39 AM

Pour conteneuriser une application Java, créez une image Docker à l'aide d'une image de base minimale comme OpenJdk: 17-Jre-Alpine, copiez le fichier JAR pré-construit dans l'image, exposez le port requis (par exemple, 8080) et définissez le point de saisie de la mise en efficacité Java, en garantissant que le JAR est construit en dehors du processus de construction docker pour l'efficacité. 2. Déployez l'application conteneurisée sur Kubernetes en définissant un manifeste de déploiement avec les répliques souhaitées, l'image de conteneur, les limites de ressources et les variables d'environnement, et les associer à un manifeste de service de Type LoadBalancer pour exposer l'application externe. 3. Appliquez les meilleures pratiques telles que l'activation du support JVM Container avec -xx: useContainersupport and setting -xmx pour s'aligner avec les limites de mémoire des conteneurs, en utilisant des images de base légères ou distrodes, en implémentant des sondes de vivacité et de préparation à la fiabilité et à l'externalisation de la configuration via Configmaps et secrets. 4. Tirez parti de Kubernetes pour la mise à l'échelle et de la gestion en élargissant manuellement les répliques ou en utilisant un autoscaler de pod horizontal basé sur des mesures, et surveiller les performances de l'application à l'aide d'outils tels que Prometheus et Grafana pour suivre la collecte des ordures et l'utilisation du thread, assurant un fonctionnement optimal et résilient.

Conteneurisation des applications Java avec Docker et Kubernetes

La conteneurisation des applications Java est devenue une pratique standard dans le développement de logiciels modernes, en particulier lors de la mise à profit de Docker pour l'emballage et des Kubernetes pour l'orchestration. Cette approche entraîne la cohérence entre les environnements, améliore l'évolutivité et simplifie les workflows de déploiement. Voici comment compenceriser efficacement une application Java à l'aide de Docker et l'exécuter sur Kubernetes.

Conteneurisation des applications Java avec Docker et Kubernetes

1. Création d'une image Docker pour une application Java

La première étape consiste à emballer votre application Java dans un conteneur Docker. La plupart des applications Java sont conçues sous forme de fichiers JAR (en particulier les applications de démarrage Spring), qui peuvent être exécutées avec java -jar .

Étapes clés:

  • Utilisez une image de base minimale (par exemple, OpenJDK avec Alpine ou Amazon Corrett)
  • Copiez le pot construit dans l'image
  • Exposez le port nécessaire
  • Définissez la commande de démarrage

Exemple Dockerfile :

 # Utilisez une image OpenJDK légère
De OpenJDK: 17-Jre-Alpine

# Définir le répertoire de travail
WorkDir / App

# Copier le pot de l'hôte (le processus de construction devrait produire ce premier)
Copier Target / MyApp.jar App.jar

# Expose Port (par exemple, 8080 pour Spring Boot)
Exposer 8080

# Exécutez l'application
EntryPoint ["java", "-jar", "app.jar"]

? Astuce: construisez votre pot à l'extérieur du Dockerfile (en utilisant Maven / Gradle localement ou en CI), puis copiez-le.

Conteneurisation des applications Java avec Docker et Kubernetes

Construisez l'image:

 docker build -t my-java-app: 1.0.

Exécutez-le:

Conteneurisation des applications Java avec Docker et Kubernetes
 Docker Run -P 8080: 8080 My-Java-App: 1.0

2. Déploiement à Kubernetes

Une fois conteneurisé, vous pouvez déployer votre application Java sur un cluster Kubernetes à l'aide de manifestes standard: déploiement et service.

Exemple deployment.yaml :

 Apversion: applications / v1
genre: déploiement
métadonnées:
  Nom: Java-App-déploiement
SPEC:
  répliques: 2
  sélecteur:
    MatchLabels:
      App: Java-App
  modèle:
    métadonnées:
      Étiquettes:
        App: Java-App
    SPEC:
      conteneurs:
      - Nom: Java-App
        Image: my-java-app: 1.0
        PORTS:
        - Containerport: 8080
        ressources:
          Limites:
            Mémoire: "512mi"
            CPU: "500m"
        Env:
        - Nom: Spring_profiles_active
          valeur: "prod"

Exemple service.yaml (pour exposer l'application):

 Apversion: V1
genre: service
métadonnées:
  Nom: Java-App-Service
SPEC:
  sélecteur:
    App: Java-App
  PORTS:
    - Protocole: TCP
      Port: 80
      Targetport: 8080
  Type: LoadBalancer

Appliquer au cluster:

 kubectl appliquer -f déploiement.yaml
kubectl appliquer -f service.yaml

✅ Votre application Java s'exécute désormais dans Kubernetes avec l'équilibrage de la charge et les contraintes de ressources de base.


3. Meilleures pratiques pour Java dans les conteneurs

Java n'a pas été conçu à l'origine avec des conteneurs à l'esprit, donc quelques ajustements aident à éviter les pièges courants.

Considérations importantes:

  • Définir les limites de mémoire et les drapeaux JVM
    Le JVM peut ne pas respecter les limites de mémoire du conteneur par défaut. Utilisez des drapeaux comme:

     EntryPoint ["java", "-xx: useContainersupport", "-xmx400m", "-jar", "app.jar"]

    Cela permet une mémoire et une détection de CPU consacrées aux conteneurs (disponibles depuis Java 10).

  • Utilisez de petites images de base
    Préférez eclipse-temurin:17-jre-alpine ou images distroless pour réduire la surface d'attaque et la taille de l'image.

  • Contrôles de santé à Kubernetes
    Ajoutez des sondes de vivacité et de préparation pour une meilleure fiabilité:

     LiviceProbe:
      httpget:
        Chemin: / ACTUATEUR / SANTÉ
        Port: 8080
      InitialDelaysecondes: 60
      Conseils de périodes: 10
    RefensseProbe:
      httpget:
        Chemin: / ACTUATEUR / SANTÉ
        Port: 8080
      InitialDelaySeconds: 30
      Conseils de périodes: 5
  • Configuration externalisé
    Utilisez des configmaps et des secrets au lieu des valeurs de codage en dur:

     EnvFrom:
      - configmapref:
          Nom: Java-App-Config
      - SecretRef:
          Nom: Java-App-Secrets

    4. Échelle et gestion avec Kubernetes

    Kubernetes brille lors de la mise à l'échelle des applications Java en fonction de la charge.

    • Utilisez kubectl scale deployment java-app-deployment --replicas=5 à l'échelle manuellement.
    • Configurez Horizontal Pod Autoscaler (HPA) basé sur le processeur ou les mesures personnalisées.
    • Survenez avec des outils comme Prometheus Grafana, en particulier les performances GC et l'utilisation du fil.

    La conteneurisation des applications Java avec Docker et Kubernetes n'est pas compliquée, mais le faire correctement signifie prêter attention au comportement JVM dans les conteneurs, une gestion appropriée des ressources et tirer parti des fonctionnalités de Kubernetes telles que des sondes et une échelle automatique.

    Fondamentalement, construisez une image maigre, exécutez-la en toute sécurité dans le JVM et laissez Kubernetes gérer le reste.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Rimworld Odyssey Comment pêcher
1 Il y a quelques mois By Jack chen
Puis-je avoir deux comptes Alipay?
1 Il y a quelques mois By 下次还敢

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1506
276
Comment un hashmap fonctionne-t-il en interne en Java? Comment un hashmap fonctionne-t-il en interne en Java? Jul 15, 2025 am 03:10 AM

HashMap implémente le stockage de paires de valeurs clés via des tables de hachage en Java, et son noyau réside dans les emplacements de données de positionnement rapidement. 1. Utilisez d'abord la méthode HashCode () de la clé pour générer une valeur de hachage et la convertir en un index de tableau via les opérations de bit; 2. Différents objets peuvent générer la même valeur de hachage, entraînant des conflits. À l'heure actuelle, le nœud est monté sous la forme d'une liste liée. Après JDK8, la liste liée est trop longue (longueur par défaut 8) et elle sera convertie en arbre rouge et noir pour améliorer l'efficacité; 3. Lorsque vous utilisez une classe personnalisée comme clé, les méthodes equals () et hashcode () doivent être réécrites; 4. Hashmap élargit dynamiquement la capacité. Lorsque le nombre d'éléments dépasse la capacité et se multiplie par le facteur de charge (par défaut 0,75), se développez et remaniez; 5. Hashmap n'est pas en file et concu doit être utilisé dans multithread

Exemple facultatif Java Exemple facultatif Java Jul 12, 2025 am 02:55 AM

Facultatif peut clairement exprimer les intentions et réduire le bruit du code pour les jugements nuls. 1. Facultatif. Par exemple, lors de la prise de valeurs des cartes, Orelse peut être utilisée pour fournir des valeurs par défaut, afin que la logique soit plus claire et concise; 2. Utilisez des cartes d'appels de chaîne pour atteindre les valeurs imbriquées pour éviter en toute sécurité le NPE, et terminer automatiquement si un lien est nul et renvoie la valeur par défaut; 3. Le filtre peut être utilisé pour le filtrage conditionnel, et les opérations ultérieures ne continueront à être effectuées que si les conditions sont remplies, sinon elle sautera directement à Orelse, qui convient au jugement commercial léger; 4. Il n'est pas recommandé de surutiliser facultatif, tels que des types de base ou une logique simple, ce qui augmentera la complexité, et certains scénarios reviendront directement à NU.

Comment réparer Java.io.NotSerializableException? Comment réparer Java.io.NotSerializableException? Jul 12, 2025 am 03:07 AM

La solution de contournement principale pour la rencontre de Java.io.NotSerializableException est de s'assurer que toutes les classes qui doivent être sérialisées implémentent l'interface sérialisable et de vérifier le support de sérialisation des objets imbriqués. 1. Ajouter des ouvrages ImplementSerialisables à la classe principale; 2. Assurez-vous que les classes correspondantes de champs personnalisées de la classe implémentent également sérialisables; 3. Utilisez transitoire pour marquer les champs qui n'ont pas besoin d'être sérialisés; 4. Vérifiez les types non sérialisés dans les collections ou les objets imbriqués; 5. Vérifiez quelle classe n'implémente pas l'interface; 6. Considérez la conception de remplacement pour les classes qui ne peuvent pas être modifiées, telles que la sauvegarde des données clés ou l'utilisation de structures intermédiaires sérialisables; 7. Envisagez de modifier

Comment gérer les problèmes d'encodage des personnages en Java? Comment gérer les problèmes d'encodage des personnages en Java? Jul 13, 2025 am 02:46 AM

Pour faire face aux problèmes de codage des personnages en Java, la clé est de spécifier clairement le codage utilisé à chaque étape. 1. Spécifiez toujours le codage lors de la lecture et de l'écriture de texte, utilisez InputStreamReader et OutputStreamWriter et transmettez un jeu de caractères explicite pour éviter de s'appuyer sur le codage par défaut du système. 2. Assurez-vous que les deux extrémités sont cohérentes lors du traitement des chaînes sur la limite du réseau, définissez l'en-tête de type contenu correct et spécifiez explicitement le codage avec la bibliothèque. 3. Utilisez String.getBytes () et Newstring (octet []) avec prudence, et spécifiez toujours manuellement StandardCharsets.Utf_8 pour éviter la corruption des données causée par les différences de plate-forme. En bref, par

Fondamentaux et exemples de programmation Java Socket Fondamentaux et exemples de programmation Java Socket Jul 12, 2025 am 02:53 AM

La programmation Javasocket est la base de la communication réseau, et l'échange de données entre les clients et les serveurs est réalisé via Socket. 1. Le socket en Java est divisé en la classe de socket utilisée par le client et la classe SERVERSOCKET utilisée par le serveur; 2. Lors de la rédaction d'un programme de socket, vous devez d'abord démarrer le port d'écoute du serveur, puis lancer la connexion par le client; 3. Le processus de communication comprend l'établissement de connexion, la lecture et l'écriture des données et la fermeture du flux; 4. Les précautions incluent l'évitement des conflits de port, la configuration correcte des adresses IP, la fermeture raisonnable des ressources et la prise en charge de plusieurs clients. La maîtrise peut réaliser des fonctions de communication réseau de base.

Comparable vs comparateur en java Comparable vs comparateur en java Jul 13, 2025 am 02:31 AM

En Java, comparable est utilisé pour définir les règles de tri par défaut en interne et le comparateur est utilisé pour définir plusieurs logiques de tri à l'extérieur. 1. Comparable est une interface implémentée par la classe elle-même. Il définit l'ordre naturel en réécrivant la méthode compareto (). Il convient aux classes avec des méthodes de tri fixe et le plus couramment utilisées, telles que la chaîne ou le rendement. 2. Comparateur est une interface fonctionnelle définie à l'extérieur, implémentée via la méthode compare (), adaptée aux situations où plusieurs méthodes de tri sont requises pour la même classe, le code source de classe ne peut pas être modifié ou la logique de tri est souvent modifiée. La différence entre les deux est que comparable ne peut définir qu'une logique de tri et doit modifier la classe elle-même, tandis que comparable

Comment itérer sur une carte à Java? Comment itérer sur une carte à Java? Jul 13, 2025 am 02:54 AM

Il existe trois méthodes courantes pour traverser la carte dans Java: 1. Utilisez l'entrée pour obtenir des clés et des valeurs en même temps, ce qui convient à la plupart des scénarios; 2. Utilisez un ensemble de touches ou des valeurs pour traverser respectivement les clés ou les valeurs; 3. Utilisez Foreach de Java8 pour simplifier la structure du code. EntrySet renvoie un ensemble de set contenant toutes les paires de valeurs de clé, et chaque boucle obtient l'objet Map.Entry, adapté à un accès fréquent aux touches et aux valeurs; Si seules les clés ou les valeurs sont nécessaires, vous pouvez appeler respectivement KeySet () ou Values (), ou vous pouvez obtenir la valeur via map.get (key) lors de la traversée des clés; Java 8 peut utiliser ForEach ((clé, valeur) - & gt

Quel est le mot-clé «statique» en Java? Quel est le mot-clé «statique» en Java? Jul 13, 2025 am 02:51 AM

Injava, thestatickeywordmeansamemberbelongstotheclassitelf, nottoinstances.staticvariblesaresharedacrossallinstances et accessibles withoutObjectCreation, utileforglobaltrackingorconstants.staticMethodsoperatatheClasslevel, ne peut pas accessner-staticmembers,

See all articles