详解docker部署SpringBoot及替换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)

访问WEB

jar包映射部署

按照上文的步骤已足可以轻松应对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包内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:使用Docker部署SpringBoot项目的实现方法利用Dockerfile部署SpringBoot项目的方法java通过Idea远程一键部署springboot到Docker详解Springboot项目打war包docker包找不到resource下静态资源的解决方案把jar包变成docker容器的方法

  • 本文相关:
  • 详解docker创建支持ssh服务的容器和镜像
  • docker之修改/etc/default/docker 里的docker_opts参数不生效问题
  • linux 详解useradd 命令基本用法
  • 详解docker方式实现mysql 主从复制(实践篇)
  • 使用 docker 搭建 laravel 本地环境的教程详解
  • 详解docker创建php开发环境遇到的权限问题解决方案
  • docker简单入门使用教程
  • 详解docker搭建redis集群的环境搭建
  • docker registry私服搭建的方法
  • docker使用storage出现exit导致文件无法上传服务器的问题及解决方
  • 如何在docker中部署springboot的web应用
  • docker部署springboot是不是服务器要maven
  • 如何在docker中部署springboot的web应用
  • 怎么把spring boot打包成镜像部署到docker
  • springboot使用docker怎么部署到服务器
  • 怎么把spring boot打包成镜像部署到docker
  • docker 启动springboot不能上传文件
  • springboot docker 与dubbo zookeeper 的区别在哪
  • springboot如何连接docker 搭建的redis 哨兵?
  • jar打包后点击没反应,命令行运行出现Unable to ac...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全dockerhyper-vvmwarevirtualboxxenserverkvmqemuopenvzxencloudstackopenstack云计算技术云其它首页服务器云和虚拟化dockerdocker kubernetes dashboard安装部署详细介绍docker如何使用link建立容器之间的连接使用docker部署springboot项目的实现方法利用dockerfile部署springboot项目的方法java通过idea远程一键部署springboot到docker详解springboot项目打war包docker包找不到resource下静态资源的解决方案把jar包变成docker容器的方法详解docker创建支持ssh服务的容器和镜像docker之修改/etc/default/docker 里的docker_opts参数不生效问题linux 详解useradd 命令基本用法详解docker方式实现mysql 主从复制(实践篇)使用 docker 搭建 laravel 本地环境的教程详解详解docker创建php开发环境遇到的权限问题解决方案docker简单入门使用教程详解docker搭建redis集群的环境搭建docker registry私服搭建的方法docker使用storage出现exit导致文件无法上传服务器的问题及解决方docker 给运行中的容器设置端口映docker获取镜像报错docker: errodocker 清理命令集锦docker.service启动失败:unit nubuntu14.04+docker的安装及使用浅谈docker-compose网络设置之nedocker容器如何优雅的终止详解docker容器访问宿主机网络的方法centos7 安装docker 解决启动不了详解docker国内镜像拉取和镜像加docker compose多容器部署的实现docker容器绑定外部ip和端口的方法docker 容器操作指令汇总详解解决docker安装完成报:bridge-nf-call-ipdocker 常用命令整理(实用篇)docker 入门快速上手指南docker cpu限制的实现两小时入门docker教程实践docker之创建mariadb镜像的方法使用docker+devpi搭建本地pypi源的方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved