前言:要在docker运行java(jar包)程序,就要把程序打包成docker镜像(以下简称镜像),可以先理解为镜像就是jar包

打包需要程序代码,java本身的打包环境(包括jdk和maven),以及docker,因此本文在装了以上环境的环境(尤其是装了docker)进行打包

首先要修改代码


使用ewater框架开发的程序,代码文件需要修改,才能进行打包成docker镜像

在此路径添加名为Dockerfile的文件

内容为:

FROM openjdk:8-jdk-alpine

VOLUME /tmp

ADD ewater-0.0.1.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

PS:第3行的“ewater-0.0.1.jar”要按maven打包输出的文件实际修改

修改pom文件

<docker.image.prefix>springio</docker.image.prefix>

<plugin>

<groupId>com.spotify</groupId>

<artifactId>docker-maven-plugin</artifactId>

<version>0.4.14</version>

<configuration>

<imageName>${docker.image.prefix}/${project.artifactId}</imageName>

<!--指定docker镜像的版本号-->

<imageTags>

<!--使用maven项目的版本号-->

<imageTag>${project.version}</imageTag>

<imageTag>latest</imageTag>

</imageTags>

<dockerDirectory>src/main/docker</dockerDirectory>

<resources>

<resource>

<targetPath>/</targetPath>

<directory>${project.build.directory}</directory>

<include>${project.build.finalName}.jar</include>

</resource>

</resources>

</configuration>

</plugin>

修改代码完毕,接原文


然后把代码拷到打包的电脑,cd进代码目录(pom文件所在目录)

-P dev-docker

运行mvn package -P dev-docker docker:build,把程序打包为镜像。第一次打包会久一些

PS:参数-P是指定打包使用的profile名称,不一定需要

PS:成功的样子

运行docker image ls,列出所有本地镜像,可以看到刚才打包的

PS:为什么一个镜像有两行?先不展开,注意他们tag不一样

镜像打包到此完成


下面还扩展一下:在docker以镜像方式运行java程序

Dokcer可以单独使用,k8s不是必须的,在有k8s之前docker就是单独使用

本文假设java程序的镜像已经打包好且在本地,运行的是以下镜像

运行docker run -p 20801:20801 -t springio/ewater,启动名为springio/ewater的镜像

端口:两个20801代表http端口,因为本java程序是springboot,springmvc开发,有http请求功能,所以需要端口

PS:启动时有命令行输出,内容跟直接运行jar包差不多

到此启动成功,可以在浏览器访问里面的http请求来测试

PS:ip是master1的ip,端口是docker run指定的端口

扩展:如何停止运行中的镜像?

首先科普个新名称——容器(container),镜像运行时叫容器,一个镜像可以开启运行多个容器(就像一个jar包可以同时在多个tomcat运行)

因此问题应该是如何停止运行中的容器

运行docker ps,可见所有运行中的容器

CONTAINER ID是容易的唯一id

然后有以下的命令:

停止运行容器(fca333c9ce5f代表容器id)

docker stop fca333c9ce5f

删除容器

docker rm fca333c9ce5

把java(springboot)程序打包docker镜像的更多相关文章

  1. Java SpringBoot 项目构建 Docker 镜像调优实践

    PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...

  2. Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...

  3. 通过IDEA制作包含Java应程序的Docker镜像

    IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...

  4. springboot项目打包docker镜像maven插件

    <!-- profile docker config --> <profiles> <profile> <id>docker</id> &l ...

  5. 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  6. 聊聊.net应用程序的Docker镜像

    ​要在容器中运行.net应用程序,你需要在容器镜像中安装.net Framework或.net Core 运行时.这不是你需要自己管理的东西,因为微软提供的Docker镜像已经安装了运行时,你可以使用 ...

  7. 将spring cloud打包docker镜像

    简介:用spring cloud构建微服务后,微服务肯定要docker镜像化然后用rancher等可视化工具管理,这就是走完了一套基本的流程,现在简单介绍下 环境:两台centos7.x的服务器,一台 ...

  8. 【Docker】(5)---springCloud注册中心打包Docker镜像

    [Docker](5)---springCloud注册中心打包Docker镜像 上一篇文章讲了将镜像推送到远处私有仓库,然后再从私有仓库拉取该镜像的过程.而这里的镜像是直接从Docker拉取的. 所以 ...

  9. BI系统打包Docker镜像及部署的技术难度和实现

    BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...

随机推荐

  1. os模块、sys模块、json模块、pickle模块、logging模块

    目录 os模块 sys模块 json模块 pickle模块 logging模块 os模块 功能:与操作系统交互,可以操作文件 一.对文件操作 判断是否为文件 os.path.isfile(r'路径') ...

  2. layui问题之渲染数据表格时,只显示10条数据

    通过ajax请求的数据,console.log()有30条数据,实际上只显示10条, 原因是没有设置limit table.render({ elem: '#report-collection' , ...

  3. HTML页面滑动到最底部触发事件

    其实基本原理做一个判断,如果 页面总高度  =  视口高度  +  浏览器窗口上边界内容高度 ,那么就是把页面滑动到了最低部,然后执行一个事件. //要触发的事件(自己定义事件的内容) functio ...

  4. html的a链接的href怎样才另起一个页面,一个页面调到另一个html页面

    在后面加上target ="_blank",就可以,正如: <ul class="nav navbar-nav navbar-right" style=& ...

  5. 面试题常考&必考之--js中的call()和apply()

    apply: 接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组.当第一个参数为null.undefined的时候,默认指向window. call: 第一个参数是要绑定给thi ...

  6. 博弈论 x

    ——关于博弈论 四道例题带你走进博弈论~ (考虑必败态,必胜态) Ps:要理解这种思想,首先要明白什么叫必败态.说简单点,必败态就是“在对方使用最优策略时,无论做出什么决策都会导致失败的局面”.其他的 ...

  7. NOI 2727:仙岛求药 x

    总时间限制:  1000ms 内存限制:  65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...

  8. 【bzoj2724】[Violet 6]蒲公英

    *题目描述: *输入: 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 *输出: *样例输入: 6 3 1 2 3 2 1 ...

  9. 【gym102222K】Vertex Covers(高维前缀和,meet in the middle)

    题意:给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,问所有点覆盖的权值之和膜q n<=36, 1<=a[i]<=1e9,1e8<=q<=1e9 思路:n&l ...

  10. [LOJ2288][THUWC2017]大葱的神力:搜索+背包DP+费用流+随机化

    分析 测试点1.2:搜索+剪枝. 测试点3:只有一个抽屉,直接01背包. 测试点4.5:每个物品体积相同,说明每个抽屉能放下的物品个数固定,建图跑费用流. 测试点6:每个物品体积相近,经过验证发现每个 ...