将jar包打包为docker镜像

本文主要讲如何将一个jar包打包成一个docker镜像,并运行起来,这里我以metabase.jar为例,这个jar包可以直接使用下面命令进行运行:

java -jar metabase.jar

接下来将他打包成docker镜像,直接在docker中运行,第一步没有安装docker的首先要安装docker,安装docker不为本教程重点,可点击如下链接:docker介绍和安装

一,编写dockerfile

1.这个jar包可以放到你想放的地方,然后在与jar包相同的文件夹中运用下边命令创建dockerfile文件并进行编辑

touch DockerFile

2.添加如下内容,当然如果是其它jar包要记得更换名字,不要照抄
在这里插入图片描述

#penjdk:8-jre 为基础镜像,来构建此镜像,可以理解为运行的需要基础环境
FROM openjdk:8-jre
#WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行。
WORKDIR /opt/docker/images/metabase/
#将当前metabase.jar 复制到容器根目录下
ADD metabase.jar metabase.jar
#将依赖包 复制到容器根目录/libs下,metabase.jar已不再需要添加其它jar包
#ADD libs /libs
#暴露容器端口为3000 Docker镜像告知Docker宿主机应用监听了3000端口
EXPOSE 3000
#容器启动时执行的命令
CMD java -jar metabase.jar

创建后:
在这里插入图片描述

二,使用docker build构建镜像

注意:这个命令是在我的DockerFile所在目录执行的,还有别忘记了命令后边的空格和点

//docker build
// . 表示当前目录 -f 参数指定Dockerfile文件  -t 表示 制作的镜像:tag  
docker build -f DockerFile  -t  test/metabase:1.0.0  .

构建完成后使用以下命令查看是否有我们的test/metabase镜像

docker images

以下是我的查询结果:
openjdk是我们编写DockerFile时添加的依赖镜像,所以docker会自动根据dockerfile将openjdk镜像下拉下来
在这里插入图片描述

三,运行docker镜像

//-d 表示后台运行容器 ,-p表示将宿主机的3000端口映射到容器中的3000端口
docker run -d -p 3000:3000 test/metabase:1.0.0

一个镜像每run一次就会新增一个容器,也就是一个镜像可以对应多个容器
然后我们查看容器发现已经有了docker容器,使用以下命令

docker ps -a

在这里插入图片描述

四,启动停止容器

启动(containerid就是docker ps -a 查询出来的containerid):

docker start containerid

因为我们构建这个容器时(也就是run镜像时)使用了-d,所以运行这个容器会返回一个id,比如:
在这里插入图片描述
我们可以使用以下命令来查看这个容器运行的后台日志文件(注意这个日志文件只是静态的,我们需要多次执行这个命令来查看实时状态):

docker logs id

在这里插入图片描述
可以看到我已经执行成功了,这里穿插一个小问题,其实我是10:35启动的,docker时间与我们中国的真实时间晚了8小时,解决方案可以看我这篇文章:docker容器内时间相差8小时问题
在这里插入图片描述
所以我可以直接通过ip和端口访问我这个jar包上的系统了:
在这里插入图片描述

### 将Java应用程序(JAR文件)构建为Docker镜像的最佳实践 #### 准备工作 为了功将Java应用程序打包Docker镜像,需确保已安装并配置好Docker环境。此外,拥有待打包的`.jar`文件也是必不可少的前提条件。 #### 创建Dockerfile 编写一个合适的`Dockerfile`是整个过程中至关重要的一步。对于大多数场景而言,推荐采用多阶段构建的方式,这种方式不仅能够有效减少最终镜像大小,还能提高安全性与性能[^2]。 ```dockerfile # 使用官方OpenJDK作为基础镜像 FROM openjdk:17-jdk-alpine AS build # 设置工作目录 WORKDIR /app # 复制项目依赖至容器内 COPY . . # 编译项目(如果适用) RUN javac -d ./out src/*.java && \ jar cvf app.jar -C out/ . # 开始第二阶段:创建精简版运行时环境 FROM openjdk:17-jre-slim # 设定工作路径 WORKDIR /opt/app # 从build阶段复制编译好的jar到此层 COPY --from=build /app/app.jar /opt/app/ # 定义默认入口点 ENTRYPOINT ["java", "-jar", "/opt/app/app.jar"] ``` 上述示例展示了如何通过两步完从源码到可执行镜像的过程。第一步基于完整的开发工具链来处理项目的编译;而第二步则仅保留必要的运行库和支持文件,从而得到体积更小、加载速度更快的结果。 #### 构建与测试镜像 保存上面定义的内容到名为`Dockerfile`的文本文件之后,在同一目录下打开终端窗口输入如下指令: ```bash $ docker build -t my-java-app . $ docker run --rm my-java-app ``` 这会触发一次完整的构建流程,并立即启动新生的应用实例用于初步验证其功能是否正常。 #### 推送至仓库 当确认本地环境中一切运作良好后,就可以考虑将该自定义镜像推送到公共或私有的注册中心以便后续分发给其他团队员或是生产服务器上部署使用了。 ```bash $ docker tag my-username/my-java-app:v1.0.0 $ docker push your-dockerhub-username/my-java-app:v1.0.0 ``` 以上操作完后即完了全部准备工作,现在可以从任何地方拉取最新版本的镜像并快速部署服务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarbein

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值