本文主要是介绍一个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镜像通吃所有需要部署的应用,生成多个容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!