把java(springboot)程序打包docker镜像
前言:要在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镜像的更多相关文章
- Java SpringBoot 项目构建 Docker 镜像调优实践
PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...
- Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...
- 通过IDEA制作包含Java应程序的Docker镜像
IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...
- springboot项目打包docker镜像maven插件
<!-- profile docker config --> <profiles> <profile> <id>docker</id> &l ...
- 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)
写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...
- 聊聊.net应用程序的Docker镜像
要在容器中运行.net应用程序,你需要在容器镜像中安装.net Framework或.net Core 运行时.这不是你需要自己管理的东西,因为微软提供的Docker镜像已经安装了运行时,你可以使用 ...
- 将spring cloud打包docker镜像
简介:用spring cloud构建微服务后,微服务肯定要docker镜像化然后用rancher等可视化工具管理,这就是走完了一套基本的流程,现在简单介绍下 环境:两台centos7.x的服务器,一台 ...
- 【Docker】(5)---springCloud注册中心打包Docker镜像
[Docker](5)---springCloud注册中心打包Docker镜像 上一篇文章讲了将镜像推送到远处私有仓库,然后再从私有仓库拉取该镜像的过程.而这里的镜像是直接从Docker拉取的. 所以 ...
- BI系统打包Docker镜像及部署的技术难度和实现
BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...
随机推荐
- 【LuoguP3329&4123】[ZJOI2011]最小割&[CQOI2016]不同的最小割
链接1 链接2 题意简述 第一个题 : 问图中有多少不同的最小割数值 第二个题 : \(q\) 次询问图中多少对点对之间的最小割小于 \(x\) . Sol 两个都是模板题就放一起了. 求完最小割树直 ...
- 死锁(deadlocks)
1.定义 所谓死锁<DeadLock>: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象.若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了 ...
- python 获取某个文件下的所有文件
import os files = os.listdir(load_Graph_file_path) cnt = 0 for file in files: print(file) if (os.pat ...
- python新动态执行 文件头标识 禁止断言
1.exec “python语句” 2. 3.禁止断言
- jsoncpp 能做什么
jsoncpp能做什么1)跨平台跨语言动态信息数据交换.2)作为格式化配置文件使用3)对应数据结构数据类型做序列化和反序列化4)value::toStyledString 格式化json串输出 一.w ...
- js中switch语句不执行
参考http://www.jb51.net/article/54393.htm switch语句与if语句的关系最为密切,也是其它编程语言中普遍使用的一种流程控制语句,但switch的匹配是全等模式, ...
- nginx做反向代理时出现302错误(转载)
现象:nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 详细现象如下: 浏览器请求登录页: 输入账号密码点击登录: 很明显登录后跳转的地址少了端口号. 原因:proxy.conf文 ...
- [BZOJ4558]:[JLoi2016]方(容斥+模拟)
题目传送门 题目描述 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形上帝把我们派到了一个有N行M列的方格图上,图上一共有$(N+1)\times ...
- 阿里云配置通用服务的坑 ssh: connect to host 47.103.101.102 port 22: Connection refused
1.~ wjw$ ssh root@47.103.101.102 ssh: connect to host 47.103.101.102 port 22: Connection refused ssh ...
- Tomcat 的work 目录
1 用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的 ...