Utilisez le plugin maven dockerfile-maven-plugin dans IDEA pour créer et transférer l'image Docker vers l'entrepôt privé (Harbor)

arrière-plan

Un projet parent-enfant construit avec maven. Il existe plusieurs sous-projets sous le projet parent. La fonction à réaliser maintenant est de conditionner un certain projet sous forme d'image Docker, puis de le pousser vers un entrepôt miroir Docker (Harbor Mirror Warehouse).

dockerfile-maven-plugin

Dans le pom parent, importez le plugin :

<pluginManagement>
     <plugins>
         <plugin>
             <groupId>com.spotify</groupId>
             <artifactId>dockerfile-maven-plugin</artifactId>
             <version>${docker.maven.plugin.version}</version>
             <executions>
                 <execution>
                     <id>default</id>
                     <goals>
                         <!--如果package时不想用docker打包,就注释掉这个goal-->
                         <goal>build</goal>
                         <goal>push</goal>
                     </goals>
                 </execution>
             </executions>
             <configuration>
                 <contextDirectory>${project.basedir}</contextDirectory>
                 <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                 <repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
                 <buildArgs>
                     <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                 </buildArgs>
             </configuration>
         </plugin>
     </plugins>
 </pluginManagement>

Parmi eux, la configuration des attributs du plug-in est la suivante :

<properties>
    <!--Harbor仓库的地址,ip:port-->
    <docker.repostory>192.168.1.6:9001</docker.repostory>
    <!--上传的Docker镜像前缀,此前缀一定要和Harbor中的项目名称一致,表示打包后的Docker镜像会上传到Harbor的哪个项目中-->
    <docker.registry.name>fyk_project</docker.registry.name>
    <docker.maven.plugin.version>1.4.10</docker.maven.plugin.version>
</properties>

De cette façon, dans chaque sous-projet, il vous suffit d'effectuer quelques autres configurations personnalisées, comme la configuration de l'étiquette de l'image, comme suit :

<finalName>fyk-config</finalName>
<plugins>
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <configuration>
            <tag>${docker.image.tag}</tag>
        </configuration>
    </plugin>
</plugins>

Les propriétés de configuration ici sont :

<properties>
    <!--Docker镜像的标签,也就是版本-->
    <docker.image.tag>v1.0.0</docker.image.tag>
</properties>

À ce stade, dans IDEA, la configuration maven de dockerfile-maven-plugin est terminée. Cependant, la mise en miroir et la mise en miroir poussée ne peuvent pas être effectuées pour le moment, et les deux autres configurations doivent être mises en miroir.

Faire une configuration miroir

Après avoir terminé la configuration du plug-in Maven d'IDEA, nous commençons maintenant à créer l'image.
Tout d'abord, il faut comprendre : la production de l'image et l'opération push sont toutes faites par Docker, il faut donc installer l'environnement Docker. En termes simples, dockerfile-maven-plugin simplifie simplement la complexité de l'exploitation directe de Docker. Cela devrait être fait par Docker, et cela doit être fait par Docker.
Ainsi, après avoir compris ce point, vous savez qu’il n’est pas nécessaire d’installer l’environnement Docker localement, du moment qu’il existe un environnement Docker.
Puisqu'il suffit d'avoir un environnement Docker, j'utilise ici l'environnement Docker sur le serveur (bien sûr, vous pouvez également utiliser l'environnement Docker local, utiliser l'environnement Docker local ne nécessite pas de configuration supplémentaire, suivez simplement le tutoriel pour installer Docker localement) . Pour utiliser l'environnement Docker du serveur, vous devez configurer une variable d'environnement (par défaut, le plug-in est connecté à l'environnement Docker local, soit 127.0.0.1), la configuration de la variable d'environnement est la suivante, il suffit de modifier sur votre propre environnement Docker de serveur (peut nécessiter un redémarrage de l'ordinateur ) :
DOCKER_HOST tcp://192.168.1.6:2375
insérer la description de l'image ici
À ce stade, une étape supplémentaire est nécessaire pour créer l'image Docker. Écrivez le fichier Docker : créez un fichier Docker dans le répertoire du sous-projet (même niveau que le fichier pom), Le contenu est le suivant :

FROM frolvlad/alpine-oraclejdk8
EXPOSE 10000
ADD target/fyk-config.jar /fyk-config.jar
ENTRYPOINT exec java -jar /fyk-config.jar

Ok, exécutez maintenant la commande mvn clean package packaging pour créer l'image. Une fois la commande exécutée, vous pouvez afficher l'image dans l'environnement Docker. Voici l'image que je viens de créer :
insérer la description de l'image ici

Poussez l'image vers l'entrepôt

Étant donné que l'entrepôt que je souhaite pousser est privé et nécessite un nom d'utilisateur et un mot de passe, je dois ajouter la configuration suivante dans le fichier de configuration maven (fichier de configuration) :

<servers>
	<server>
		<id>192.168.1.6:9001</id>
		<username>fyk</username>
		<password>Fyk123456</password>
		<configuration>
			<email>[email protected]</email>
		</configuration>
	</server>
</servers>

L'identifiant ici est l'adresse IP et le port de l'entrepôt.
Après configuration, exécutez la commande :

mvn dockerfile:push

La signification de cette commande est de pousser l’image vers l’entrepôt miroir. L'image poussée est l'image qui vient d'être générée dans Docker (dans le cas présent, cette commande pousse l'image de Docker vers l'entrepôt, et la manière dont l'image est créée n'a pas d'importance). Après avoir exécuté cette commande, vérifiez l'entrepôt Harbour :
insérer la description de l'image icià ce stade, IDEA utilise le plug-in maven dockerfile-maven-plugin pour créer et transférer l'image Docker vers l'entrepôt privé (Harbor) et c'est terminé.

question

Vous ne parvenez pas à vous connecter au service Docker distant ?
Ce problème peut être causé par le pare-feu (c'est simple, éteignez le pare-feu ou ouvrez un mur double face, si le mur ne peut pas être ouvert, installez Docker localement) ; si le mur est ouvert, il se peut que Docker n'ait pas accès à distance activé : ouvrez l'accès à distance du docker
 :
entrez /lib/systemd/system/docker.service

vim /lib/systemd/system/docker.service

Recherchez la ligne ExecStart et modifiez-la comme suit

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

redémarrer le démon

systemctl daemon-reload

redémarrer le menu fixe

systemctl restart docker

Vérifiez
http://ip:2375/images/json avec un navigateur
jusqu'à présent, l'accès à distance du docker est ouvert.


Au cours du processus d'opération, une certaine étape de l'opération échoue, par exemple, l'échec indique qu'une connexion Docker est requise, et ainsi de suite.
En fait, ce problème n'a rien à voir avec le plugin dockerfile-maven-plugin. Tout d'abord, comprenez que le plug-in sert juste à simplifier l'opération, cela doit être fait par Docker, ou cela doit être fait par Docker. Par conséquent, s'il y a trop de problèmes de ce type, vous pouvez télécharger manuellement une image dans l'entrepôt dans l'environnement Docker pour essayer. Si le téléchargement réussit, alors selon la méthode décrite dans cet article, tout devrait réussir. Si le téléchargement manuel échoue, il y a probablement un problème avec votre environnement. Par exemple, si vous êtes invité à vous connecter au Docker, connectez-vous simplement. Pour des questions spécifiques, vous pouvez à nouveau vous référer à d’autres documents.


Erreur : Obtenez https://192.168.1.6:9001/v2/ : http : le serveur a donné une réponse HTTP au client HTTPS.
Dans le fichier de l'environnement Docker (sur le serveur) : /etc/docker/daemon.json, ajoutez :
"non sécurisé - registres":["192.168.1.6:9001"]
comme suit :
insérer la description de l'image ici


Je suppose que tu aimes

Origine blog.csdn.net/fyk844645164/article/details/107878063
conseillé
Classement