Maison  >  Article  >  Java  >  Comment Docker déploie SpringBoot et remplace les packages jar

Comment Docker déploie SpringBoot et remplace les packages jar

PHPz
PHPzavant
2023-05-12 14:16:142292parcourir

Répertoire du projet

Comment Docker déploie SpringBoot et remplace les packages jar

dockerfile

Créez un fichier dockerfile, qui sera utilisé plus tard.

File Deployment

Créez un nouveau dossier /data/docker/hellolearn sur le serveur (le chemin du fichier peut être personnalisé), placez le package jar packagé maven et le fichier docker créé ci-dessus Copiez le fichier dans le dossier nouvellement créé sur le serveur (/data/docker/hellolearn).

Comment Docker déploie SpringBoot et remplace les packages jar

Générer une image

docker build -t hellolearn .

#🎜 🎜#docker build -t Nom de l'image : La position relative du fichier docker de l'étiquette. Le point représente le répertoire actuel. Si aucune balise n'est écrite, la valeur par défaut est la plus récente.

Comment Docker déploie SpringBoot et remplace les packages jar

Démarrer le conteneur

docker run -d -p 8301:8301 --name hellolearn hellolearn#🎜 🎜#

docker start hellolearn

Le paramètre -d permet au conteneur de s'exécuter en arrière-plan ; --name est le nom du conteneur spécifié ; effectuer le mappage de port. À ce stade, le serveur Le port 8301 (port avant les deux-points) dans le conteneur est mappé au port 8301 (port après les deux-points) dans le conteneur (application.properties est configuré avec 8301)

Visitez le Web

Comment Docker déploie SpringBoot et remplace les packages jardéploiement du mappage de package jar

Suivre les étapes ci-dessus suffit pour gérer facilement l'ensemble du processus du déploiement Docker de Springboot. Mais après avoir démarré le conteneur, chaque fois que le package jar doit être mis à jour, l'image doit être recréée, puis le conteneur doit être recréé. Le processus est extrêmement lourd et extrêmement inefficace. Alors, comment mettre à jour directement le package jar pour terminer le déploiement sans mettre à jour l'image ou le conteneur ?

5.1 Mettre à jour le dockerfile

Dernière ligne point d'entrée ["java","-jar","/data/learn-web-0.0.1-snapshot.jar "] exécutera le fichier learn-web-0.0.1-snapshot.jar dans le répertoire /data du conteneur.

5.2 Utilisez la commande docker build pour créer l'image  entrypoint ["java","-jar","/data/learn-web-0.0.1-snapshot.jar"] 会运行容器里/data目录下的learn-web-0.0.1-snapshot.jar文件。

5.2 使用docker build命令构建镜像

docker build -t hellolearn .

5.3 创建&启动容器

docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn

-v 宿主机目录关联容器目录。这样宿主机的/data/docker/newhellolearn/package目录就与docker的/data目录进行映射。

这样的话,当jar包发生变动时,直接更新宿主机的/data/docker/newhellolearn/package目录下的jar包即可,更新jar包之后需要将容器重启一下。

脚本部署

通过jar包部署方式引起一个问题,若jar包名字发生变化,比如版本号变化(learn-web-0.0.1-snapshot.jar-->>learn-web-1.0.1-snapshot.jar)。需要怎么处理呢?下面就介绍第三种通过脚本部署的方式。

6.1 创建hellolearn.sh文件

java -jar /data/learn-web-0.0.1-snapshot.jar

将hellolearn.sh上传到/data/docker/hellolearn/scriptdeploy/package,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到。

6.2 添加脚本执行权限

chmod +x hellolearn.sh

6.3 创建dockerfile

cmd ["sh","-c","/data/hellolearn.sh"] 

docker build -t hellolearn .

5.3 Créer & démarrez le conteneur

docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn

# 🎜🎜## 🎜🎜#-v Le répertoire hôte est associé au répertoire conteneur. De cette façon, le répertoire /data/docker/newhellolearn/package de l'hôte est mappé au répertoire /data de docker.

Comment Docker déploie SpringBoot et remplace les packages jarDans ce cas, lorsque le package jar change, mettez simplement à jour le package jar dans le répertoire /data/docker/newhellolearn/package de la machine hôte directement. Après avoir mis à jour le package jar, vous devez redémarrer. le conteneur.

Déploiement de script

La méthode de déploiement du package jar provoque un problème si le nom du package jar change, comme le changement du numéro de version (learn-web. -0.0 .1-snapshot.jar-->>learn-web-1.0.1-snapshot.jar). Que faut-il faire ? La troisième méthode de déploiement via des scripts est présentée ci-dessous.

6.1 Créer un fichier hellolearn.sh

java -jar /data/learn-web-0.0.1-snapshot.jar
#🎜🎜 #

Téléchargez hellolearn.sh dans /data/docker/hellolearn/scriptdeploy/package. Ce chemin de dossier peut être personnalisé. N'oubliez pas ce chemin de dossier, qui sera utilisé plus tard.

6.2 Ajouter une autorisation d'exécution de script

chmod +x hellolearn.sh

6.3 Créer un fichier docker#🎜🎜# #🎜🎜#cmd ["sh","-c","/data/hellolearn.sh"] signifie démarrer le script hellolearn.sh créé en 6.1 au démarrage du conteneur. #🎜🎜##🎜🎜#Notez que la dernière commande mentionnée ci-dessus est Entrypoint, qui a été modifiée en cmd dans le déploiement du script. Si vous êtes intéressé par la différence spécifique entre Entrypoint et cmd, vous pouvez en savoir plus. #🎜🎜##🎜🎜#6.4 Téléchargez le package jar #🎜🎜##🎜🎜#Placez le package jar dans le même répertoire que hellolearn.sh, c'est-à-dire /data/docker/hellolearn/scriptdeploy/package, lorsque création du conteneur Mappez ensuite ce répertoire (répertoire hôte) au répertoire /data du conteneur. . #🎜🎜##🎜🎜#6.5 Diagramme de la structure du répertoire de fichiers#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Je ne sais pas si vous êtes confus au sujet de la structure du répertoire ici, téléchargez-en un ici. Le diagramme de la structure des répertoires de l'hôte est clair en un coup d'œil. #🎜🎜##🎜🎜#6.6 Créer une image #🎜🎜##🎜🎜##🎜🎜#docker build -t hellolearn-script .#🎜🎜##🎜🎜##🎜🎜#Le point à la fin représente le répertoire courant , la commande pour générer l'image doit donc être exécutée dans le répertoire où se trouve le fichier docker. #🎜🎜##🎜🎜#6.7 Créer et démarrer un conteneur #🎜🎜##🎜🎜##🎜🎜#docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script#🎜🎜##🎜🎜#docker start hellolearn-script#🎜🎜#

Associez le répertoire /data/docker/hellolearn/scriptdeploy/package de l'hôte au mappage du répertoire /data du conteneur. Dans ce cas, lorsque le package jar change, mettez simplement à jour le package jar directement dans le répertoire hôte. Même si le nom du package jar change, vous devez toujours mettre à jour le script hellolearn.sh. Redémarrez le conteneur après la mise à jour.

Effet de test Web 6.8

Comment Docker déploie SpringBoot et remplace les packages jar

Afficher les journaux Docker

journaux Docker [options] identifiant du conteneur

description des options :

-f : suivre la sortie du journal
--depuis : afficher une certaine heure de début Tous logs
-t : Afficher l'horodatage
--tail : Répertorier uniquement les n derniers journaux de conteneur

7.1 Afficher les journaux après l'heure spécifiée, afficher uniquement les 100 dernières lignes :

docker logs -f -t -- since= "2020-10-01" --tail=100 conteneur id

7.2 Vérifiez les journaux de la période spécifiée

docker logs -t --since="2020-10-01t19:00:00" -- jusqu'à "2020-10-01t19:00:00" identifiant du conteneur

7.3 Afficher les journaux après l'heure spécifiée :

docker logs -t --since="2020-10-01t19:00:00" identifiant du conteneur

7.4 Afficher les journaux des 5 dernières minutes :

docker logs --since 5m containers id

7.5 Exécuter bash sur le conteneur spécifié via la commande exec :

docker exec hellolearn -it /bin / bash ou docker exec -it hellolearn bash docker exec hellolearn -it /bin/bash 或者 docker exec -it hellolearn bash

7.6 查看docker ip

docker inspect --format='{{.networksettings.ipaddress}}' hellolearn

遇到的问题

问题描述:error response from daemon: driver failed programming external connectivity on endpoint flamboyant_leavitt (iptables failed: iptables --wait -t nat -a docker -p tcp -d 0/0 --dport 8301 -j dnat --to-destination 172.17.0.2:8301 ! -i docker0: iptables: no chain/target/match by that name.

解决方案:重启docker。 systemctl restart docker

7.6 Afficher docker ip🎜🎜🎜docker inspect --format='{{.networksettings.ipaddress}}' hellolearn🎜🎜

Problèmes rencontrés🎜🎜Description du problème : réponse d'erreur du démon : échec de programmation du pilote pour la connectivité externe sur le point de terminaison flamboyant_leavitt (échec d'iptables : iptables --wait -t nat -a docker -p tcp -d 0/ 0 --dport 8301 -j dnat --to-destination 172.17.0.2:8301 ! -i docker0 : iptables : pas de chaîne/cible/correspondance de ce nom.🎜🎜Solution : redémarrez docker. systemctl redémarrer le docker🎜

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer