Maison  >  Article  >  Java  >  La méthode et le processus de création d'une image Docker à l'aide du programme Java

La méthode et le processus de création d'une image Docker à l'aide du programme Java

不言
不言original
2018-09-19 15:35:332145parcourir

Le contenu de cet article concerne la méthode et le processus de création d'une image Docker avec le programme Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Exigences

Voici quelques exigences pour la production d'images Docker, puis nous verrons comment le faire.

  1. Le processus de production doit être intégré au processus de construction du projet

  2. Utiliser l'image officielle comme image de base

  3. Définir le fuseau horaire correct

  4. Le programme dans le conteneur est démarré en tant qu'utilisateur non root

  5. Spécifiez l'interface du programme Web

  6. Capable de transmettre les paramètres JVM, les propriétés du système Java et les paramètres définis par le programme

Parlons de la façon de faire le ci-dessus en détail :

Le processus de production doit être intégré au processus de construction du projet

Il est recommandé d'utiliser le dockerfile-maven-plugin de Spotify car ce plugin est le plus simple à utiliser et facile à maîtriser .

L'essence de ce plugin est que vous écrivez un Dockerfile (veuillez vous référer à la documentation officielle pour la méthode d'écriture spécifique de Dockerfile. Ce plugin transmet certains paramètres pour vous aider à créer une image Docker).

Donc, tant que vous pouvez écrire Dockerfile, vous utiliserez ce plugin. Il n'ajoute aucun concept supplémentaire.

Utilisez l'image officielle comme image de base

L'image de base de Java doit être trouvée dans le référentiel openjdk, pas dans le référentiel Java obsolète.

Le référentiel openjdk fournit une variété de balises d'image qui peuvent sembler éblouissantes, mais il n'y en a essentiellement que quelques-unes :

  • openjdk:<version>

  • openjdk:<version>-slim

  • openjdk:<version>-alpine

Concernant <version>, d'une manière générale, spécifiez simplement un numéro de version plus grand. Par exemple, vous pouvez écrire ceci dans le Dockerfile :

FROM openjdk:8-alpine

En termes de taille, alpine est le plus petit, slim est légèrement plus grand et la valeur par défaut. est le plus grand. Par conséquent, vous devez utiliser la version alpine autant que possible. Si vous constatez que l'environnement d'exécution du programme manque de quelque chose, essayez d'utiliser la version slim ou la version par défaut. En termes d'expérience actuelle :

  • Si vous avez besoin de la bibliothèque de polices du système d'exploitation, vous devez utiliser la version slim ou la version par défaut. Programmes nécessitant des bibliothèques de polices du système d'exploitation telles que les codes de vérification d'image et l'exportation PDF.

  • Si vous avez besoin de bibliothèques de liens dynamiques/statiques standard Linux, alors si la version alpine ne fonctionne pas, essayez la version slim ou la version par défaut. Parce que la version alpine est un Linux extrêmement simplifié, elle supprime beaucoup de choses.

Définissez le fuseau horaire correct

Le fuseau horaire de presque toutes les images Docker est UTC. Nous devons définir le fuseau horaire de l'image Docker que nous avons créée :

ENV TZ=Asia/Shanghai
RUN set -eux; \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone
Le programme dans le conteneur est démarré en tant qu'utilisateur non root

Dans l'image Docker, nous devons utiliser l'utilisateur non root pour démarrer le programme, ce qui nécessite l'utilisation de gosu .

Le guide Dockerfile de Gosu est ici.

N'oubliez pas de choisir la méthode d'installation appropriée en fonction des différentes images de base.

Spécifiez l'interface du programme Web

Pour les applications en réseau, le port exposé doit être spécifié dans le Dockerfile, sinon le port ne peut pas être mappé.

EXPOSE 8080
Pouvoir transmettre les paramètres JVM, les propriétés du système Java et les paramètres définis par le programme

Nous devons pouvoir transmettre certains paramètres lors du démarrage de l'image Docker :

  • Paramètres JVM

  • Propriétés du système Java

  • Paramètres de démarrage du programme

Ici, vous devez vous référer aux bonnes pratiques de Dockerfile et à Docker ENTRYPOINT.

Exemple de projet

Un exemple de code source de projet est ici : https://github.com/chanjarster/dockerfile-examples/

Structure du répertoire

Tous les éléments liés au programme sont stockés sous

 : /home/java-app/

/home/java-app
   ├── docker-entrypoint.sh
   ├── lib
   │   └── java-app.jar
   ├── etc
   ├── logs
   └── tmp
docker-entrypoint.sh, script de démarrage

lib, stockez le package JAR

lib /java-app .jar, programme package JAR

etc, stocke les fichiers de configuration

journaux, stocke les fichiers journaux

tmp, stocke les fichiers temporaires

construire la méthode de l'image

mvn clean package dockerfile:build
s'exécute

et démarre normalement, puis accède à

 : http://localhost:8080

docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
pour définir les paramètres JVM et utiliser les

variables d'environnement : JVM_OPTS

docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
Définissez les propriétés du système, utilisez

variables d'environnement : JAVA_ARGS

docker run -p 8080:8080 -e JAVA_ARGS='-Dabc=xyz -Ddef=uvw' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
Fournissez les paramètres d'exécution du programme, ajoutez-les simplement directement après :

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:
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