springboot docker 部署(详解docker部署SpringBoot及替换jar包的方法)
springboot docker 部署
详解docker部署SpringBoot及替换jar包的方法目录
- 工程目录
- Dockerfile文件
- 文件部署
- 生成镜像
- 启动容器
- 访问WEB
- jar包映射部署
- 脚本部署
- 查看docker日志
- 遇到的问题
关于docker的安装和使用,可以看看之前这两篇文章。docker kubernetes dashboard安装部署详细介绍和Docker如何使用link建立容器之间的连接。这篇文章主要介绍如何在docker上部署springboot项目。关于如何创建springboot项目可以看看这篇文章IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题
本文主要介绍docker部署springboot的三种方式,分别是:入门方式、jar包替换部署的方式和脚本部署方式,一步步来手把手教程。注意这三种方式的命名是我自创非官方的。
工程目录 Dockerfile文件创建Dockerfile文件,后面会用到。
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp # VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD learn-web-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"] ###声明启动端口号 #EXPOSE 8301
在服务器新建/data/docker/hellolearn文件夹(文件路径可自定义),将maven打包好的jar包和上文中创建的Dockerfile文件复制到服务器新建的文件夹(/data/docker/hellolearn)。
生成镜像docker build -t hellolearn .
docker build -t 镜像名称:标签 Dockerfile的相对位置,点号代表当前目录,不写tag默认是latest。
启动容器docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d参数是让容器后台运行;--name为指定容器的名称;-p 是做端口映射,此时将服务器中的8301(冒号前的端口)端口映射到容器中的8301(冒号后的端口)端口(application.properties配置的是8301)
访问WEBjar包映射部署
按照上文的步骤已足可以轻松应对docker部署springboot的全流程。但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再重新制作容器。流程及其繁琐,效率极低。那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
5.1 更新Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 EXPOSE 8301 ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]
最后一行 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
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基础镜像使用java FROM java:8 EXPOSE 8301 CMD ["sh","-c","/data/hellolearn.sh"]
CMD ["sh","-c","/data/hellolearn.sh"]
表示在容器启动时启动6.1中创建的hellolearn.sh脚本。
注意最后一条命令上文中都是ENTRYPOINT,在脚本部署中改成了CMD,至于ENTRYPOINT和CMD的具体区别感兴趣的可以了解一下。
6.4 上传jar包
将jar包放入hellolearn.sh的同一个文件夹目录,即/data/docker/hellolearn/scriptdeploy/package,创建容器时再将该目录(宿主机目录)与容器的/data目录进行映射。。
6.5 文件目录结构图
这里的目录结构不知道大家晕不晕,上传一张我这宿主机的目录结构图,一目了然。
6.6 创建镜像
docker build -t hellolearn-script .
末尾的点号代表当前目录,所以生成镜像的命令需要在Dockerfile所在的目录执行。
6.7 创建&启动容器
docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script
docker start hellolearn-script
将宿主机的/data/docker/hellolearn/scriptdeploy/package目录与容器的/data目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。即使jar包名字发生变化,也需要再更新一下hellolearn.sh脚本。更新之后重启容器。
6.8 web测试效果
查看docker日志docker logs [OPTIONS] CONTAINER ID
OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
7.1 查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2020-10-01" --tail=100 CONTAINER ID
7.2 查个指定时间区段的日志
docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" CONTAINER ID
7.3 查看指定时间后面的日志:
docker logs -t --since="2020-10-01T19:00:00" CONTAINER ID
7.4 查看最近5分钟的日志:
docker logs --since 5m CONTAINER ID
7.5 通过 exec 命令对指定的容器执行 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
具体问题相关信息详见Error response from daemon: driver failed programming external connectivity on endpoint mysql3308 (
源码地址
https://github.com/toutouge/javademosecond/tree/master/hellolearn
到此这篇关于详解docker部署SpringBoot及替换jar包的方法的文章就介绍到这了,更多相关docker部署SpringBoot及替换jar包内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- spring boot docker部署(docker部署springboot和vue项目的实现步骤)
- docker容器退出错误码的步骤(docker容器退出错误码的步骤)
- springboot怎么设置docker(Docker如何给Springboot项目动态传参的实现方法)
- docker里面安装redis(Docker上实现Redis集群搭建)
- 在windows安装docker详细步骤(Docker 部署 Prometheus的安装详细教程)
- docker进入容器的方法(docker容器里面的root权限获取方法)
- docker配置自己的环境(docker可视化工具Portainer部署并汉化的操作)
- docker 容器端口查不到(docker容器无法访问宿主机端口的解决)
- 如何启动所有docker服务(docker 使用CMD或者ENTRYPOINT命令同时启动多个服务)
- dockerfile映射目录(Dockerfile中ENTRYPOINT 和 CMD的区别说明)
- docker 环境下udp双向通信怎么办(解决Docker network Create加--subnet后遇到问题)
- docker无法启动内存不足(解决docker磁盘空间不足问题)
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- docker启动k8s(k3d入门指南之在Docker中运行K3s的详细教程)
- docker插件容器使用(Docker容器开jupyter不能访问到的解决方法)
- idea 远程部署docker(通过idea打包项目到docker的操作方法)
- 袁冰妍终于接到新剧,饰演反追男主,看到合作演员 眼光果然毒辣(袁冰妍终于接到新剧)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
热门推荐
- mysql简单查询基本语句(详解MySQL 查询语句的执行过程)
- docker容器编排入门教程(简简单单使用Docker部署Confluence)
- python数据类型基本知识入门(Python Pexpect库的简单使用方法)
- 推荐一款好用的项目管理系统:禅道项目管理系统
- computer browser服务启动后停止(用户IIS APPPOOLDefaultAppPool登录失败的解决方法)
- python redis锁的使用(Python操作redis实例小结String、Hash、List、Set等)
- python3.9.6生成的注册表(厉害了,Python也能操作注册表)
- json和xml比较与区别
- Visual Studio 调试方法
- LocalStorage用法
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9