Cet article présente les techniques d'utilisation d'images Maven Docker et les partage avec vous, comme suit:
Maven est actuellement l'un des outils de gestion de projet Java les plus populaires, offrant une puissante gestion de la dépendance des packages et des fonctions de construction d'applications.
Docker fournit des images Maven officielles qui peuvent être utilisées pour gérer et créer des applications Java. Par rapport à l'installation directe de l'outil Maven, l'utilisation d'images Docker a une meilleure portabilité et peut être facilement commutée, ce qui est idéal pour une utilisation pendant l'intégration continue.
Pour l'utilisation de Maven Official Mirror, veuillez vous référer à la documentation d'utilisation.
Utilisation du nuage Alibaba pour accélérer
La vitesse de téléchargement de l'entrepôt officiel de Maven sur le réseau domestique est vraiment déchirante. L'utilisation de l'image Maven d'Alibaba Cloud peut considérablement améliorer la vitesse de téléchargement des packages logiciels.
Nous pouvons ajouter la configuration d'image du cloud Alibaba basé sur l'image Maven officielle. Son code est disponible sur https://github.com/aliyuncontainerservice/maven-image
Ses paramètres de fichier de configuration.xml sont les suivants
<paramètres xmlns = "http://maven.apache.org/settings/1.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" https://maven.apache.org/xsd/settings-1.0.0.xsd "> <localRepository> / usr / share / maven / réf / Repository </ LocalRepository> <Mirrors> <Mirror> <! - Cela envoie tout le reste à / public -> <id> Aliyun-nexus </id> <Mirorof> * </ Mirorof> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> </ mirror> <Mirror> <! - Ceci est utilisé pour diriger le repo public des instantanés publics ci-dessous à un autre groupe Nexus -> <id> Aliyun-Nexus-Public-Snapshots </id> <Mirrorof> public-snapshots </ mirrorof> <url> http://maven.aliyun.com/nexus/content/repositories/snapshots/ </url> </ mirror> </ mirrors> </dgets>
Alibaba Cloud Container Service fournit des images Docker pré-construites pour l'utilisation directe de Registry.cn-hangzhou.aliyuns.com/acs/maven.
Nous pouvons exécuter directement la commande suivante dans le répertoire actuel comme l'utilisation de la commande mvn pour créer l'application
Copiez le code comme suit: docker run -it --rm --name maven -v "$ (pwd)": / usr / src / app -w / usr / src / app regriter.cn-hangzhou.aliyuns.com/acs/maven mvn net install install install install install install
Si vous souhaitez pouvoir mettre en cache le référentiel Maven téléchargé, nous pouvons utiliser le volume de fichiers de Docker pour l'implémenter
Tout d'abord, exécutez la commande suivante pour créer un volume de fichiers appelé "Maven-Repo"
Docker Volume Create --name Maven-Repo
Dans l'appel suivant, montez-le dans le répertoire de téléchargement du référentiel dans l'image Maven
Copiez le code comme suit: docker run -it --rm --name maven -v "$ (pwd)": / usr / src / app -v maven-repo: / usr / share / maven / ref -w / usr / src / app regrist
De cette façon, le référentiel Maven ne sera pas téléchargé à chaque fois.
Optimiser dockerfile pour améliorer la vitesse de construction
Nous pouvons créer des applications dans Dockerfile et utiliser le mécanisme de mise en cache hiérarchique pendant la construction de Docker pour améliorer la vitesse de construction
Voici un exemple de fichier dockerfile.build
De registry.cn-hangzhou.aliyuncs.com/acs/maven:3-jdk-8env my_home = / usr / src / apprun mkdir -p $ my_homeworkdir $ my_homeadd pom.xml $ my_home # ["/usr/local/bin/mvn-entrypoint.sh" ,"mvn" ,"verify" ,"clean" ,"--fail-never" $ My_home # run maven Verifyrun ["/usr/local/bin/mvn-entrypoint.sh" ,"mvn" ,"verify"]
L'une des astuces importantes consiste d'abord à ajouter pom.xml au répertoire de travail, à utiliser la commande maven pour télécharger le package JAR requis par l'application, puis à ajouter le fichier source d'application pour la compilation. De cette façon, tant que le pom.xml n'est pas mis à jour, le package de pot de dépendance ne sera pas redémarré, ce qui peut considérablement accélérer la vitesse de construction de l'image.
Nous pouvons compiler l'application via la commande suivante
docker build -t builder-iMg -f dockerfile.build.
Compilation d'applications séparée et construction d'images Docker
Pour les langages compilés statiques, nous devons généralement séparer le processus de compilation d'application du processus de construction du miroir. Il y a deux considérations principales:
Nous pouvons copier les résultats de la compilation d'application de l'image docker, comme suit
docker build -t builder-img -f dockerfile.build .docker create --name builder-imgdocker cp builder: / usr / src / app / cible ./target
À l'heure actuelle, le résultat de la construction de Maven est copié dans le sous-répertoire "cible" du répertoire actuel.
Après cela, nous pouvons utiliser un autre dockerfile pour créer des images d'application. Je n'entrerai pas dans les détails si j'ai un espace limité.
Résumer
Cet article utilise Maven comme exemple pour introduire certaines techniques communes pour Docker dans la construction d'applications.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.