一个jdk镜像通吃所有需要部署的应用,生成多个容器

2024-02-23 04:44

本文主要是介绍一个jdk镜像通吃所有需要部署的应用,生成多个容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

生产过程中,一个服务制作一个镜像,有点太占用空间,由此,考虑设置一个镜像能支持多个服务的部署,通过文件挂载的模式,通过启动容器时候传递参数实现该需求。

 编写dockerfile

# 集成某个初始镜像
FROM openjdk:11-jre-slim
#设置容器启动时Springboot启动参数--默认值为空
ENV JAVA_OPTS=
# 设置build-arg key=value build参数
# ARG params=build时指定的参数
# 设置jar的路径及名称
ENV JAR_NAME=
## 创建文件路径
RUN mkdir -p /ssss
## 指定工作路径
WORKDIR /ssss
## 拷贝文件数据--本场景不需要该命令
#COPY *.jar /ssss/$JAR_NAME
## 声明要使用的端口
EXPOSE 8080
## 启动jar 脚本
CMD java -jar $JAVA_OPTS $JAR_NAME
#ENTRYPOINT ["sh" "-c" "java -jar $JAVA_OPTS /apps/app.jar"]

构建镜像

## -t 打上标签 .表示使用当前路径下的Dockerfile
docker build -t test .

 出现successfully表示成功了,中间出现的语法构建错误问题,根据错误提示,基本上都能解决。

## 查看当前所有的镜像系想你
docker images

  

 该test镜像就是后面运行出各个容器的基础,仅有这一个镜像

启动容器-(test-one)

进入需要挂载和启动的Springboot路径,执行以下命令 ,执行第一个需要运行的Springboot服务

## -d 后台运行
## --name 为容器起个名称
## -v 文件路径挂载
## -e 是设置dockerfile中设置的环境变量 --多个变量可以使用多个-e标签
## -p 端口映射 宿主机器端口:容器端口
## `pwd`为当前路径,笔者当前的springboot jar路径为 /data/docker/server/server1.jar
##  最后面test为镜像名称
docker run -d --name test-one -v `pwd`:/server1/ -e JAR_NAME=/server1/server1.jar -e JAVA_OPTS="-Dserver.port=10008" -p 10008:10008 test

 

启动容器-(test-2)

进入需要挂载和启动的Springboot路径,执行以下命令 ,执行第二个需要运行的Springboot服务

## -d 后台运行
## --name 为容器起个名称
## -v 文件路径挂载
## -e 是设置dockerfile中设置的环境变量 --多个变量可以使用多个-e标签
## -p 端口映射 宿主机器端口:容器端口
## `pwd`为当前路径,笔者当前的springboot jar路径为 /data/docker/server/server2.jar
##  最后面test为镜像名称
docker run -d --name test-one -v `pwd`:/server/ -e JAR_NAME=/server/server2.jar -e JAVA_OPTS="-Dserver.port=10008" -p 10009:10008 test

 查看容器是否在运行

docker ps

查看接口文档,验证容器是否启动成功 

 

 至此,支持多个jar应用部署的镜像制作完整,应用改变jdk版本只需要将该镜像的jdk修改即可,一下是可能会使用到的docker命令

## 搜索镜像
docker search openjdk
## 列出当前所有镜像
docker iamges
## 列出所有容器
docker ps -a 
## 列出所有运行容器
docker ps
## 删除所有none标签的镜像
docker rmi $(docker images| grep none | awk '{print $3}')## 通过已知镜像查看镜像的dockerfile---由此得到的dockerfile并不准
docker history test --format "{{.CreatedBy}}" --no-trunc

记录备查 

这篇关于一个jdk镜像通吃所有需要部署的应用,生成多个容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737550

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总