美文网首页
以 Docker方式发布SpringBoot 应用

以 Docker方式发布SpringBoot 应用

作者: 有料美拓 | 来源:发表于2019-06-24 21:03 被阅读0次

以 Docker方式发布SpringBoot 应用

一、为什么要用 Docker方式来发布

想用 Docker 来部署应用其实已经满长时间了,苦于没有时间认真研究,一直忙于 代码的编写,二来也没有什么需要多次重复部署的需求。当然第二点更直接。所以都没认真看过文档。

进来有个上线的系统,需要同时部署多份,才发现,确实有些麻烦,如果维护则更加麻烦。数据库安装、java 环境参数、应用程序,都需要考虑,头绪太多了。所以 Docker 化部署再次提及日程。

经过一段研究已经小有成效,记录下来以备忘记的时候重新恢复记忆使用。Ubuntu 14.04 LTS 环境测试通过。

二、环境准备

  • 已经可以上线跑的一个 SpringBoot 应用,比如它有一下的目录结构,简单起见,我用通配符代表很多文件。假设应用默认服务于 9200 端口。

  • /root/app1/app.jar
    /root/app1/T/*.* 
    /root/app1/res/*.*
    /root/app1/application.yml
    
  • 确保本地应用已经可以正常运行。

  • 安装 docker,不赘述,各个操作系统方法不一致。不在此文讨论。

三、概念准备

1.Docker 相关概念
  • Docker镜像。我们理解 Docker 镜像可以拿大家比较熟悉的 GHOST 镜像来想比较一下。你安装一个 windows 可以选择用 ghost 来加速安装,这样很多软件,驱动,一次性就安装好了。Docker 镜像也是这样的,有人事先安装配置好一定的环境,你下载好镜像,运行起来就可以获得这个环境的功能;镜像有很重要的几个属性,Repository、Tag、ImageId,分别可以理解为镜像名称、版本、全局不重复编号
  • Docker 容器。Docker镜像运行起来以后,docker 会将它加载到一个容器,容器可以理解为一个通用的盒子,装入不同的镜像,就可以提供不同的功能。容器就一个黑盒子,你可以为它指定运行的镜像,开放的端口等等。
2.Dockerfile
  • FROM 指令,可以理解为底包,就是我们要 build 我们自己的镜像的时候,是以哪个镜像为基础的。这个比较好理解就是,如果我们做的是一个 springboot 应用的发布,那么一定是以 java 为底包来扩展的

  • ADD 指令,作用是在建立镜像的时候需要将本地的文件加入到镜像内的指令。它把以/结尾的名称看做目录,而把没有的部分看做文件。所以如果你想把本地的/T/文件在创建时候打包到镜像的 root目录里面去,那么你需要写。特别要省略/,文件就正常写就 OK 了。

    ADD /T/ /root/T/

  • WORKDIR 指令,指定镜像内执行命令的默认工作路径,这个非常重要,镜像启动后一定会需要你在某个特定的位置去执行命令,如果不指定这个工作目录路径,很容易造成指令找不到配置或静态文件等问题。

  • ENTRYPOINT 指令,Docker启动后执行的那个守护进程的命令。这个命令执行后,需要是一个可以 hold 住 docker 的一个程序,让这个容器始终处于活跃状态,一般一个服务就能达到这种效果,所以这里我们把 jar 包运行起来的命令当做入口命令

四、实操

1.编写 Dockerfile

这里我们假定,将我们的程序部署在 docker 镜像的 root 目录中去,docker 启动后执行我们的 app.jar 包

FROM java:8
MAINTAINER pcode@mtttt.cn
ADD app.jar /root/app.jar
ADD ./res/ /root/res/
ADD ./lib/ /root/lib/
ADD ./T/ /root/T/
WORKDIR /root/
ENTRYPOINT ["java","-jar","app.jar"]
2.Build镜像

讲了很多,实际上真的要去做了,内容并不多。将上面的内容编写进一个 Dockerfile,存放在于 app.jar 一个目录内

docker build -f Dockerfile .

默认创建的 docker镜像没有 tag,可以手动运行 docker tag 名来来指定 tag 比如 docker tag imageid 镜像名:标签 这样就搞定了。

​ docker images

就会发现我们打包好的镜像已经在了。

3.运行镜像

假定我们的程序跑在 9020 端口,那么接下来就是最后一步了。

docker run -d -p 8080:9020 imageid

我们把镜像中的 9020 端口映射到 host server 的 8080 端口上,这样就可以直接访问 server 的 8080 端口来使用服务了;

五、导出导入容器

docker export 290b8d571b59e137d62be1 > update.tar

注意要根据实际情况替换镜像的 id

docker import - update < update.tar

六、导入导出镜像

save
命令
docker save [options] images [images...]

示例
docker save -o nginx.tar nginx:latest

docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
load
命令
docker load [options]

示例
docker load -i nginx.tar

相关文章

网友评论

      本文标题:以 Docker方式发布SpringBoot 应用

      本文链接:https://www.haomeiwen.com/subject/tysaqctx.html