基于SpringBoot项目实现Docker容器化部署的主要步骤
目录
- 准备docker镜像
- 编写Dockerfile
- 构建Docker镜像
- 运行Docker容器
- 访问应用程序
- 闲言少叙,上科技!!!
- 方式一:直接构建jar包运行的镜像
- 方式二:基于jdk镜像运行容器 在服务器中来取jdk镜像
将Spring Boot项目部署到Docker容器中的涉及几个主要步骤:
准备Docker镜像
- 首先,需要选择一个基础镜像,通常是包含Java运行时环境的镜像,例如OpenJDK。可以从Docker Hub或其他镜像仓库中获取这些镜像。
- 接下来,需要在基础镜像上构建一个包含Spring Boot应用程序的镜像。这包括将应用程序的JAR文件、依赖项和配置文件添加到镜像中。
编写Dockerfile
- Dockerfile是一个文本文件,其中包含了构建Docker镜像的指令。需要编写一个Dockerfile来指定如何构建包含Spring Boot应用程序的镜像。
- 在Dockerfile中,可以使用COPY指令将本地文件(包括Spring Boot应用程序的JAR文件和配置文件)复制到镜像中。
- 使用RUN指令可以在容器内运行命令,例如安装依赖项或执行应用程序的构建。
- 使用CMD或ENTRYPOINT指令指定在容器启动时要运行的命令,通常是启动Spring Boot应用程序的命令。
构建Docker镜像
- 使用docker build命令根据Dockerfile构建Docker镜像。例如:docker build -t my-spring-boot-app .,其中-t选项用于指定镜像的名称和标签。
运行Docker容器
- 使用docker run命令运行你的Docker镜像。例如:docker run -p 8080:8080 my-spring-boot-app,其中-p选项用于将主机的端口映射到容器的端口,以便外部可以访问应用程序。
- 还可以使用其他选项来配置容器,例如挂载卷、设置环境变量等。
访问应用程序
- 一旦容器运行,可以通过访问主机的端口(在上述示例中是8080)来访问运行在Docker容器中的Spring Boot应用程序。
Docker容器化部署Spring Boot项目的原理涉及将应用程序及其依赖项打包到一个Docker镜像中,然后在容器内运行该镜像。这使得应用程序在不同环境中更加可移植和隔离,同时也方便了部署和扩展。使用Docker可以大大简化应用程序的部署流程,并提供了更好的资源管理和隔离,以及更高的可伸缩性。
闲www.devze.com言少叙,上科技!!!
方式一:直接构建jar包运行的镜像
- 将打包好程序,上传到服务器的指定目录
- 例如:/home/www/spring-boot-image/spring-boot-docker-1.0.jar
- 在该目录下创建Dockerfile文件
FROM openjdk:8u312 MAINTAINER zhangt ADD spring-boot-docker-1.0.jar zhangt.jar EXPOSE 8520 ENTRYPOINT ["java","-jar","zhangt.jar"]
Dockerfile的内容解释:
FROM openjdk:8u312
这一行指定了基础镜像,从openjdk:8u312
镜像构建。它使用了OpenJDK 8的版本号为312的镜像作为基础。这是一个包含Java运行时环境的基础镜像。MAINTAINER zhangt
这一行设置了维护者信息,尽管在较新版本的Docker中,MAINTAINER
已不再建议使用,而可以使用LABEL
来添加类似的元数据信息。ADD spring-boot-docker-1.0.jar zhangt.jar
这一行使用ADD
指令将本地的spring-boot-docker-1.0.jar
文件复制到镜像中,并重命名为zhangt.jar
。这个JAR文件包含了Spring Boot应用程序的可执行代码。EXPOSE 8520
这一行使用EXPOSE
指令声明容器将监听的端口号,这里指定为8520。请注意,这只是一个元数据声明,它不会自动将端口映射到主机上。ENTRYPOINT ["java","-jar","zhangt.jar"]
这一行设置了容器启动时要执行的命令。在这种情况下,容器将以java -jar zhangt.jar
命令启动,这会运行Spring Boot应用程序。java
命令会启动Java虚拟机(JVM),并执行zhangt.jar
中的可执行代码。这Dockerfile的作用是基于OpenJDK 8u312镜像构建一个包含Spring Boot应用程序的Docker镜像。一旦构建完成,可以使用这个镜像来运行Spring Boot应用程序的容器,容器将监听8520端口,可以通过适当的端口映射来让外部访问应用程序。
创建好Dockerfile文件之后,执行命构建镜像
docker build -t zhangt .
注意最后的 .
表示Dockerfile在当前文件目录下。zhangt表示构建的镜像,构建成功后可以使用**docker images
**命令查看镜像。
-t
选项用于指定镜像的名称和标签,你可以将 zhangt
替换为你想要的名称和标签。
镜像构建成功之后,就可以运行容器
docker run -dqrAtXmjUW --restart=always --name zhangt -p 8520:8520 zhangt
各个参数的含义:
docker run
: 用于启动 Docker 容器的命令。-d
: 这是一个选项,表示在后台(守护进程模式)运行容器。容器将在后台运行,不会占据终端。--restart=always
: 这是另一个选项,表示容器在退出时总是重新启动。即使容器因为错误或其他原因而停止,Docker 也会尝试自动重新启动容器。--name zhangt
: 这是用于给容器指定一个名称的选项。容器的名称被设置为 “zhangt”。-p 8520:8520
: 这是用于将主机端口与容器端口进行映射的选项。这个选项将主机的 8520 端口映射到容器的 8520 端口。这样,外部可以通过访问主机的 8520 端口来访问容器内运行的应用程序。zhangt
: 这是容器的名称或镜像名称,表示要运行的容器是基于名为 “zhangt” 的 Docker 镜像创建的。如果 “zhangt” 是一个镜像名称,Docker 将查找该镜像并在容器中运行它。这个命令的目的是在后台运行一个 Docker 容器,该容器使用 “zhangt” 镜像创建,并将主机的 8520 端口映射到容器的 8520 端口。容器的名称设置为 &ldquoqrAtXmjUW;zhangt-p”,并且如果容器在任何情况下退出,Docker 会自动重新启动它。这通常用于部署应用程序,以确保应用程序在意外情况下能够自动恢复。启动容器后可以使用 **docker ps
**命令查看启动的容器docker logs -f --tail 1000 容器id
,可以查看服务的日志。如qrAtXmjUW果想更新jar包,只需要使用docker cp spring-boot-docker-1.0.jar 容器ID:/zhangt.jar
,就可以将spring-boot-docker-1.0.jar拷贝进容器并重命名,然后docker restart 容器ID
重启容器。
方式二:基于jdk镜像运行容器 在服务器中来取jdk镜像
docker pull openjdk:8u181
创建目录,并将jar包上传到该目录
cd /home/ mkdir www/spring-boot-docker
在Jar放置的同级目录,编写shell脚本命名为:start.sh
#!/bin/bash echo -e "\n################ build service start #########################" # delete docker container echo -e "\n1, delete docker container [developer-platform-basic-dev] start ......" sudo docker rm -f spring-boot-docker-1.0 # docker run # docker run developer-platform-basic-1.0.0 echo -e "\n2, docker run build container [spring-boot-docker-1.0] start ......" sudo docker run --name spring-boot-docker-1.0 -d -p 8741:8741 \ -v /home/www/spring-boot-docker:/jar openjdk:8u181 \ java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev echo -e "\n3, docker ps container [spring-boot-docker-1.0] start ...." sudo docker ps -a | grep spring-boot-docker-1.0 echo -e "\n4, docker logs container [spring-boot-docker-1.0] start ...." sudo docker logs -f -t spring-boot-docker-1.0 > ./logs/log_$(date +%Y%m%d).out 2>&1 & echo -e "\n################ build service end #########################"
核心脚本解释:
1.sudo docker run
这是用于在Docker中运行容器的命令。通常需要使用sudo权限来执行Docker命令,以确保具有足够的权限来管理容器。2.--name spring-boot-docker-1.0
: 这是为Docker容器指定的名称,容器的名称被设置为"spring-boot-docker-1.0"。3.-d
: 这是一个选项,表示在后台运行容器(即以守护进程模式运行),而不是在前台交互模式下运行。4.-p 8741:8741
: 这个选项用于将主机的端口与容器的端口进行映射。具体来说,将主机的8741端口映射到容器的8741端口,这样外部可以通过主机的8741端口访问容器中的应用程序。5.-v /home/www/spring-boot-docker:/jar
: 这个选项用于将主机的文件系统目录与容器内的目录进行挂载。在这种情况下,将主机上的/home/www/spring-boot-docker目录挂载到容器内的/jar目录。这通常用于将应用程序的代码和资源文件从主机复制到容器中,以便在容器内运行应用程序。6.openjdk:8u181
: 这是要在容器中使用的Docker镜像的名称和标签。在这里,使用的是一个基于OpenJDK 8u181的Java镜像,该镜像包含了Java运行时环境。7.java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev
: 这是在容器内运行的命令。它启动了Java虚拟机(JVM),并在编程JVM内运行了一个Spring Boot应用程序。具体来说,它运行了/jar/spring-boot-docker-1.0.jar这个JAR文件,并通过–spring.profiles.active=dev指定了一个Spring配置文件的激活配置。
这个脚本的作用是创建一个名为"spring-boot-docker-1.0"的Docker容器,该容器运行一个基于Spring Boot的Java应用程序,该应用程序监听8741端口,并将主机上的/home/www/spring-boot-docker目录挂载到容器内的/jar目录,以供应用程序使用。这样,可以通过主机的8741端口访问运行在容器中的Spring Boot应用程序。
运行脚本 sh start.sh
以后发布,只需要把宿主机目录里的jar包替换掉,重启容器。
到此这篇关于基于SpringBoot项目实现Docker容器化部署的文章就介绍到这了,更多相关SpringBoot Docker容器化部署内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论