


Comment créer une image d'application Web Springboot et la déployer à l'aide de conteneurs
Nous connaissons les trois concepts majeurs de Docker : l'image, le conteneur et l'entrepôt. L'image est la base du fonctionnement du conteneur De manière générale, notre développement. Le processus démarre à partir de Docker Hub, obtient l'image de base, effectue certains développements personnalisés basés sur l'image de base (par exemple, placer l'application dans l'image), génère une nouvelle image et démarre le conteneur en fonction de cette nouvelle image pour exécuter l'application.
1. Deux méthodes pour générer des images
Il existe généralement deux méthodes pour créer des images Docker. L'une est basée sur le fichier de configuration dockerfile, en utilisant docker buildcode >Proceed, il s'agit de la méthode de production d'images authentiques la plus recommandée ; la seconde consiste à générer manuellement une nouvelle image à partir du contenu modifié en utilisant une commande telle que <code>docker commit
. docker build
进行,这是最推荐的正宗的镜像制作方法;第二种是通过使用docker commit
这样的命令,手动将修改后的内容生成新的镜像。
1.1、使用commit生成镜像
这种方式不太适合大规模的镜像生成,一是对于镜像的构建内容无法回溯,二是操作效率比较低,但是在某些临时情况下却也有其方便之处,特别是开发测试时,如果临时需要安装一些新的软件,可以快捷生成新的镜像。
这里以生成一个自带Golang的镜像为例,演示如何使用commit生成镜像。
1.1.1、拉取Centos基础镜像
首先我们需要拉去一个Centos的基础镜像,Golang的安装将基于这个基础镜像进行操作。
搜索centos镜像:
[root@node1 ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos DEPRECATED; The official build of CentOS. 7529 [OK] docker.io docker.io/kasmweb/centos-7-desktop CentOS 7 desktop for Kasm Workspaces 33 docker.io docker.io/couchbase/centos7-systemd centos7-systemd images with additional deb... 7 [OK]
拉取STARS数量最高的官方镜像
[root@node1 ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for docker.io/centos:latest
1.1.2、启动Centos容器并安装Go
[root@node1 ~]# docker run -it centos /bin/bash [root@311c53f54f2f /]# [root@311c53f54f2f /]# go version bash: go: command not found
这里证明基础的centos里面是没有golang的。
使用yum安装golang,发现如下错误提示
[root@311c53f54f2f /]# yum install go Failed to set locale, defaulting to C.UTF-8 CentOS Linux 8 - AppStream 71 B/s | 38 B 00:00 Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
这是因为yum源的问题,执行以下命令可以解决:
[root@311c53f54f2f yum.repos.d]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* [root@311c53f54f2f yum.repos.d]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* [root@311c53f54f2f yum.repos.d]# yum clean all Failed to set locale, defaulting to C.UTF-8 0 files removed [root@311c53f54f2f yum.repos.d]# yum makecache Failed to set locale, defaulting to C.UTF-8 CentOS Linux 8 - AppStream 2.6 MB/s | 8.4 MB 00:03 CentOS Linux 8 - BaseOS 2.0 MB/s | 4.6 MB 00:02 CentOS Linux 8 - Extras 7.7 kB/s | 10 kB 00:01 Metadata cache created.
正常成功安装golang
[root@311c53f54f2f yum.repos.d]# yum install go [root@311c53f54f2f yum.repos.d]# go version go version go1.16.12 linux/amd64
1.1.3、commit生成新镜像
首先使用docker ps
查看当前的容器container id,这里是311c53f54f2f
。
[root@node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 311c53f54f2f centos "/bin/bash" 13 minutes ago Up 13 minutes
使用docker commit
命令生成新的镜像
[root@node1 ~]# docker commit -a "lucas" -m "install golang" 311c53f54f2f centos-go:v1 sha256:019ab02d451defb75e2ee03948289ed008036ba7ec8a355cae28bdf7fbce07d2
再次使用docker image
可以看到我们生成的centos-go的新镜像。
[root@node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-go v1 019ab02d451d 2 minutes ago 805 MB docker.io/busybox latest bab98d58e29e 8 days ago 4.86 MB docker.io/nginx latest 904b8cb13b93 13 days ago 142 MB docker.io/centos latest 5d0da3dc9764 18 months ago 231 MB
1.1.4、使用新镜像验证Golang环境
[root@node1 ~]# docker run -it centos-go:v1 /bin/bash [root@daff0519f2ca /]# go version go version go1.16.12 linux/amd64
1.2、使用Dockerfile生成镜像
Dockerfile是一个包含Docker镜像构建指令的文本文件,用于自动化Docker镜像的构建过程。Dockerfile通过一系列指令来描述镜像的构建过程,包括基础镜像、依赖安装、文件拷贝、环境变量配置、启动命令等。Dockerfile的语法是类似于Shell脚本的语言。
Dockerfile包含四个部分:基础镜像信息、维护者信息、镜像操作命令和容器启动命令。在Dockerfile中,注释以#开头,可用于说明指令作用或提供其他注释信息。
以下是一些常见的Dockerfile命令:
FROM:指定基础镜像,例如
FROM ubuntu:latest
,FROM指令必须是除了注释意外的第一条指令,后续紧跟维护者信息指令。MAINTAINER:指定维护者的信息,例如
MAINTAINER lucas
。RUN:在镜像中运行命令,例如
RUN apt-get update && apt-get install -y nginx
。CMD:指定容器启动时要运行的命令,例如CMD [“nginx”, “-g”, “daemon off;”]。
EXPOSE:声明容器要监听的端口,例如
EXPOSE 80
。ENV:设置环境变量,例如
ENV NODE_ENV production
。ADD:将文件复制到镜像中,例如
ADD app.js /app.js
。COPY:将文件复制到镜像中,例如
COPY app.js /app.js
。WORKDIR:设置工作目录,例如
WORKDIR /app
。USER:设置容器启动时要使用的用户,例如
USER nginx
。VOLUME:声明容器数据卷,例如
VOLUME /data
。ENTRYPOINT:指定容器启动时要运行的命令,例如
ENTRYPOINT ["nginx", "-g", "daemon off;"]
。
除了这些常用命令,Dockerfile还有其他可用命令。可以查看Docker官方文档以获取更多信息。
完成了dockerfile的配置以后,使用docker build
就可以构建镜像了。docker build
命令可以通过指定不同的参数来自定义构建过程。例如,你可以使用--no-cache
选项来强制Docker在构建镜像时不使用缓存,或者使用--build-arg
选项来传递构建时需要的环境变量。可以通过docker build --help
1.1. Utilisez commit pour générer des images
Cette méthode ne convient pas à la génération d'images à grande échelle. Premièrement, le contenu de la construction de l'image ne peut pas être retracé. L'efficacité opérationnelle est relativement faible. Cependant, cela est également pratique dans certaines situations temporaires, notamment pendant le développement et les tests. Si vous devez installer temporairement un nouveau logiciel, vous pouvez rapidement générer une nouvelle image. Ici, nous prenons comme exemple la génération d'une image fournie avec Golang pour montrer comment utiliser le commit pour générer une image.1.1.1. Extraire l'image de base Centos
Nous devons d'abord extraire une image de base Centos qui sera basée sur cette image de base. #🎜🎜##🎜🎜# Rechercher l'image centos : #🎜🎜#FROM openjdk:18-jdk-alpine MAINTAINER lucas COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ WORKDIR /usr/app EXPOSE 8080 ENTRYPOINT ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]
docker build -t demo:latest .
1.1.2, démarrez le conteneur Centos et installez Go
[root@node1 docker]# docker build -t demo:latest . Sending build context to Docker daemon 51.05 MB Step 1/6 : FROM openjdk:18-jdk-alpine ---> c89120dcca4c Step 2/6 : MAINTAINER lucas ---> Running in 3d0ae6d2a813 ---> 085b9066ca7b Removing intermediate container 3d0ae6d2a813 Step 3/6 : COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ ---> c5c77f80f179 Removing intermediate container 00228e4b0aed Step 4/6 : WORKDIR /usr/app ---> bdb555e3fb18 Removing intermediate container 35682266f140 Step 5/6 : EXPOSE 8080 ---> Running in 499d9888fa01 ---> 0fca023e8f23 Removing intermediate container 499d9888fa01 Step 6/6 : ENTRYPOINT java -jar demo-0.0.1-SNAPSHOT.jar ---> Running in 661fdaafa31d ---> 61e80950d665 Removing intermediate container 661fdaafa31d Successfully built 61e80950d665
docker run -d -p 8080:8080 demo:latest
1.1.3, engagez-vous à générer une nouvelle image
#🎜🎜#Utilisez d'aborddocker ps
pour afficher l'identifiant actuel du conteneur, voici 311c53f54f2f
. #🎜🎜#rrreee#🎜🎜#Utilisez la commande docker commit
pour générer une nouvelle image #🎜🎜#rrreee#🎜🎜#Utilisez à nouveau docker image
pour voir ce que nous généré Une nouvelle image pour centos-go. #🎜🎜#rrreee1.1.4, Utilisez la nouvelle image pour vérifier l'environnement Golang
rrreee1.2, Utilisez Dockerfile pour générer l'image
#🎜🎜#Dockerfile est un texte contenant Fichier d'instructions de création d'image Docker, utilisé pour automatiser le processus de création d'images Docker. Dockerfile décrit le processus de création d'image à travers une série d'instructions, notamment l'image de base, l'installation des dépendances, la copie de fichiers, la configuration des variables d'environnement, la commande de démarrage, etc. La syntaxe de Dockerfile est un langage similaire aux scripts shell. #🎜🎜##🎜🎜#Dockerfile contient quatre parties : informations de base sur l'image, informations sur le responsable, commande d'opération d'image et commande de démarrage du conteneur. Dans Dockerfile, les commentaires commençant par # peuvent être utilisés pour expliquer la fonction des instructions ou fournir d'autres informations de commentaire. #🎜🎜##🎜🎜#Voici quelques commandes Dockerfile courantes : #🎜🎜#- #🎜🎜#FROM : Spécifiez l'image de base, telle que
FROM ubuntu:latest
, l'instruction FROM doit être la première instruction à l'exception des commentaires, suivie de l'instruction d'information du responsable. #🎜🎜# - #🎜🎜#MAINTAINER : Spécifiez les informations du responsable, telles que
MAINTAINER lucas
. #🎜🎜# - #🎜🎜#RUN : Exécutez des commandes dans l'image, telles que
RUN apt-get update && apt-get install -y nginx
. #🎜🎜# - #🎜🎜#CMD : Spécifiez la commande à exécuter au démarrage du conteneur, telle que CMD ["nginx", "-g", "daemon off;"]. #🎜🎜#
- #🎜🎜#EXPOSE : Déclarez le port que le conteneur écoutera, tel que
EXPOSE 80
. #🎜🎜# - #🎜🎜#ENV : définissez des variables d'environnement, telles que
ENV NODE_ENV production
. #🎜🎜# - #🎜🎜#ADD : copiez le fichier dans l'image, par exemple
ADD app.js /app.js
. #🎜🎜# - #🎜🎜#COPY : copiez le fichier dans l'image, par exemple
COPY app.js /app.js
. #🎜🎜# - #🎜🎜#WORKDIR : Définissez le répertoire de travail, tel que
WORKDIR /app
. #🎜🎜# - #🎜🎜#USER : définissez l'utilisateur à utiliser au démarrage du conteneur, tel que
USER nginx
. #🎜🎜# - #🎜🎜#VOLUME : Déclarez le volume de données du conteneur, tel que
VOLUME /data
. #🎜🎜# - #🎜🎜#ENTRYPOINT : Spécifiez la commande à exécuter au démarrage du conteneur, telle que
ENTRYPOINT ["nginx", "-g", "daemon off;"]
. #🎜🎜# #🎜🎜##🎜🎜#En plus de ces commandes courantes, Dockerfile propose d'autres commandes. Vous pouvez consulter la documentation officielle de Docker pour plus d'informations. #🎜🎜##🎜🎜#Après avoir terminé la configuration du fichier docker, utilisez
docker build
pour créer l'image. La commande docker build
peut personnaliser le processus de construction en spécifiant différents paramètres. Par exemple, vous pouvez utiliser l'option --no-cache
pour forcer Docker à ne pas utiliser le cache lors de la création de l'image, ou utiliser l'option --build-arg
pour transmettez les paramètres d’environnement de construction requis. Vous pouvez afficher toutes les options disponibles via la commande docker build --help
. #🎜🎜##🎜🎜# 2. Générez une image Springboot basée sur Dockerfile #🎜🎜##🎜🎜#Ici, nous montrons comment utiliser Dockerfile pour créer une image d'application Web Springboot et utiliser Docker pour démarrer le conteneur. #🎜🎜#2.1、准备springboot应用jar包
我们准备一个基于springboot开发的应用服务,这个服务开放8080端口,访问是返回一个用户的姓名信息。
为了方便,可以使用spring initializr 在线生成demo代码,在demo代码的基础上开发一个controller返回一个User对象的name信息,由于这块代码比较简单,这里就不详述过程了。
代码完成以后使用mvn clean package
进行打包,这里打包成功以后生成了demo-0.0.1-SNAPSHOT.jar,我们使用java -jar demo-0.0.1-SNAPSHOT.jar
就可以运行这个应用程序。
2.2、编写Dockerfile
在项目根目录下创建一个名为Dockerfile
的文件,并在其中添加以下内容:
FROM openjdk:18-jdk-alpine MAINTAINER lucas COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ WORKDIR /usr/app EXPOSE 8080 ENTRYPOINT ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]
在上面的Dockerfile中,FROM
指令指定了基础镜像为openjdk:18-jdk-alpine
,COPY
指令将构建好的可执行jar包复制到容器中,WORKDIR
指令设置工作目录为/usr/app
,EXPOSE
指令指定了容器运行的端口为8080
,ENTRYPOINT
指令指定了容器启动时要执行的命令为java -jar demo-0.0.1-SNAPSHOT.jar
。
在终端中进入项目根目录,然后执行以下命令构建镜像:
docker build -t demo:latest .
其中,-t
参数指定了镜像的名称和版本号,.
参数指定了Dockerfile所在的目录。
[root@node1 docker]# docker build -t demo:latest . Sending build context to Docker daemon 51.05 MB Step 1/6 : FROM openjdk:18-jdk-alpine ---> c89120dcca4c Step 2/6 : MAINTAINER lucas ---> Running in 3d0ae6d2a813 ---> 085b9066ca7b Removing intermediate container 3d0ae6d2a813 Step 3/6 : COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/ ---> c5c77f80f179 Removing intermediate container 00228e4b0aed Step 4/6 : WORKDIR /usr/app ---> bdb555e3fb18 Removing intermediate container 35682266f140 Step 5/6 : EXPOSE 8080 ---> Running in 499d9888fa01 ---> 0fca023e8f23 Removing intermediate container 499d9888fa01 Step 6/6 : ENTRYPOINT java -jar demo-0.0.1-SNAPSHOT.jar ---> Running in 661fdaafa31d ---> 61e80950d665 Removing intermediate container 661fdaafa31d Successfully built 61e80950d665
可以看到构建成功,使用docker images
可以查看到构建成功的镜像。
三、运行容器服务,验证镜像的可用性
以上步骤已经使用docker build生成了镜像,接下来就可以使用这个镜像启动容器,启动后会自动启动应用程序。
在终端中执行以下命令启动容器:
docker run -d -p 8080:8080 demo:latest
其中,-d
参数指定了容器在后台运行,-p
参数指定了容器的端口映射,demo:latest
参数指定了要运行的镜像名称和版本号。
访问对应的web服务进行访问验证,结果如下:
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.

Utilisation de Jetty7 pour le traitement du serveur Web dans le développement JavaAPI Avec le développement d'Internet, le serveur Web est devenu l'élément central du développement d'applications et est également au centre de l'attention de nombreuses entreprises. Afin de répondre aux besoins croissants des entreprises, de nombreux développeurs choisissent d'utiliser Jetty pour le développement de serveurs Web, et sa flexibilité et son évolutivité sont largement reconnues. Cet article explique comment utiliser Jetty7 dans le développement JavaAPI pour We

Le barrage de blocage du visage signifie qu'un grand nombre de barrages flottent sans bloquer la personne dans la vidéo, donnant l'impression qu'ils flottent derrière la personne. L'apprentissage automatique est populaire depuis plusieurs années, mais beaucoup de gens ne savent pas que ces fonctionnalités peuvent également être exécutées dans les navigateurs. Cet article présente le processus d'optimisation pratique des barrages vidéo. À la fin de l'article, il répertorie certains scénarios applicables. cette solution, dans l'espoir de l'ouvrir. mediapipeDemo (https://google.github.io/mediapipe/) montre le principe de mise en œuvre du calcul d'arrière-plan du serveur vidéo de téléchargement à la demande du barrage de blocage de visage grand public pour extraire la zone du portrait dans l'écran vidéo et la convertit en stockage SVG client pendant la lecture de la vidéo. Téléchargez svg depuis le serveur et combinez-le avec barrage, portrait.

La validation du formulaire est un maillon très important dans le développement d'applications Web. Elle permet de vérifier la validité des données avant de soumettre les données du formulaire afin d'éviter les failles de sécurité et les erreurs de données dans l'application. La validation de formulaire pour les applications Web peut être facilement implémentée à l'aide de Golang. Cet article explique comment utiliser Golang pour implémenter la validation de formulaire pour les applications Web. 1. Éléments de base de la validation de formulaire Avant de présenter comment implémenter la validation de formulaire, nous devons savoir quels sont les éléments de base de la validation de formulaire. Éléments de formulaire : les éléments de formulaire sont

Cockpit est une interface graphique Web pour les serveurs Linux. Il est principalement destiné à faciliter la gestion des serveurs Linux pour les utilisateurs nouveaux/experts. Dans cet article, nous aborderons les modes d'accès à Cockpit et comment basculer l'accès administratif à Cockpit depuis CockpitWebUI. Sujets de contenu : Modes d'entrée du cockpit Trouver le mode d'accès actuel au cockpit Activer l'accès administratif au cockpit à partir de CockpitWebUI Désactiver l'accès administratif au cockpit à partir de CockpitWebUI Conclusion Modes d'entrée au cockpit Le cockpit dispose de deux modes d'accès : Accès restreint : il s'agit de la valeur par défaut pour le mode d'accès au cockpit. Dans ce mode d'accès vous ne pouvez pas accéder à l'internaute depuis le cockpit

Les normes Web sont un ensemble de spécifications et de directives développées par le W3C et d'autres organisations associées. Elles incluent la normalisation du HTML, CSS, JavaScript, DOM, l'accessibilité du Web et l'optimisation des performances. En suivant ces normes, la compatibilité des pages peut être améliorée. , maintenabilité et performances. L'objectif des normes Web est de permettre au contenu Web d'être affiché et d'interagir de manière cohérente sur différentes plates-formes, navigateurs et appareils, offrant ainsi une meilleure expérience utilisateur et une meilleure efficacité de développement.

PHP appartient au backend du développement Web. PHP est un langage de script côté serveur, principalement utilisé pour traiter la logique côté serveur et générer du contenu Web dynamique. Par rapport à la technologie front-end, PHP est davantage utilisé pour les opérations back-end telles que l'interaction avec les bases de données, le traitement des demandes des utilisateurs et la génération du contenu des pages. Ensuite, des exemples de code spécifiques seront utilisés pour illustrer l'application de PHP dans le développement back-end. Tout d'abord, regardons un exemple de code PHP simple pour se connecter à une base de données et interroger des données :
