传统应用镜像使用

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 这里就描述了一种java传统应用的k8s的部署方法,怎样建立一个属于自己的docker 镜像,以及使用这个镜像的过程和注意事项,希望能给大家一些参考。

目前还有不少公司有比较独立传统应用使用了jdk1.6+tomcat(或者resin3.x.x)的部署方式。针对这种应用可以怎样快速进行Docker部署呢,我们是使用docker hub提供的jre基础镜像的基础上,添加了我们需要的web container,成为我们自己的应用部署基础镜像, 这里我们说说这个镜像怎样使用的。

我们使用了resin-3.x.x,遵循GPLv3协议的。我们的基础镜像名称为: xxgroup-jdk6-resin3.x.x,有2个细分版本,分别为:xxx/xxgroup-jdk6-resin3.1.8:v1-gbk,xxx/xxgroup-jdk6-resin3.1.8:v1-utf8。

一、版本说明

Java版本: openjdk:1.6.0_38

resin版本: resin-3.1.8

mysql驱动包版本:mysql-connector-java-5.1.35-bin


二、基本配置

镜像默认暴露端口(resin服务监听端口):80

日志默认全部到stdout, 具体日志滚动使用log4j、logback等日志插件

resin的cache默认不开启

resin默认配置说明:

# jvm默认配置:
<jvm-arg>-Xms256m</jvm-arg>
<jvm-arg>-Xmx256m</jvm-arg> <!-- make ms=mx to reduce GC times -->
<jvm-arg>-XX:PermSize=32m</jvm-arg>
<jvm-arg>-XX:MaxPermSize=64m</jvm-arg>
<jvm-arg>-XX:MaxDirectMemorySize=128m</jvm-arg>
<jvm-arg>-Xss256k</jvm-arg>
<jvm-arg>-Djava.net.preferIPv4Stack=true</jvm-arg> <!-- disable IPv6 -->
# 其他配置:
<!-- Maximum number of threads. -->
<thread-max>512</thread-max>
<!-- Configures the socket timeout -->
<socket-timeout>65s</socket-timeout>
<!-- Configures the keepalive -->
<keepalive-max>256</keepalive-max>
<keepalive-timeout>120s</keepalive-timeout>

三、进阶配置

1、jvm 内存等调整

Dockerfile 的 ENTRYPOINT 追加 jvm参数会覆盖默认 如下:

ENTRYPOINT ["/resin-3.1.8/bin/httpd.sh", "-Xms2048m", -Xmx2048m]

注意:对应容器也要跟着适配内存大小,避免出现异常问题

如:k8s 的resource.request 和 limit 的内存限制

2、数据源配置 (涉及敏感信息,k8s维护人员操作,开发配合)

a、开发告知运维datasource名称、类型、驱动类, 连接数等, 新建数据源的ConfigMap,内容是xml,参考如下

<cluster xmlns="http://caucho.com/ns/resin"
xmlns:resin="http://caucho.com/ns/resin/core">
<!-- database -->
<database ping='true' ping-table='dual'>
<jndi-name>jdbc/application-db-name</jndi-name>
<driver>
<type>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</type>
<url>jdbc:mysql://192.168.x.x:3307/db_name?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8</url>
<user>db_uesr</user>
<password>db-password</password>
</driver>
<prepared-statement-cache-size>30</prepared-statement-cache-size>
<max-connections>30</max-connections>
<max-idle-time>120s</max-idle-time>
</database>
</cluster>

b、使用k8s的 ConfigMap 挂载配置到 /conf/database_conf.xml (镜像默认读取此文件),也可以使用k8s的secret的。

注意:数据源名称跟开发对好,保持一致


四、Dockerfile配置

  • 在项目根目录下创建Dockerfile文件,内容如下:
FROM xxx/xxgroup-jdk6-resin3.1.8:v1-gbk
ARG WEB_PATH
ADD $WEB_PATH /data/web
ENTRYPOINT ["/resin-3.1.8/bin/httpd.sh", "-Xmx512m", "-Xms512m"]


五、开发打包说明

1、项目构建必须是maven项目,maven版本3.2+以上即可

2、项目POM文件增加dockerfile插件:dockerfile-maven-plugin,样例代码可参考下面:

<plugin>
         <groupId>com.spotify</groupId>
         <artifactId>dockerfile-maven-plugin</artifactId>
         <version>${dockerfile-maven-plugin.version}</version>
         <executions>
           <execution>
             <id>default</id>
             <goals>
               <goal>build</goal>
               <goal>push</goal>
             </goals>
           </execution>
         </executions>
         <configuration>
           <repository>${docker.host.dev}/${project.artifactId}</repository>
           <tag>${project.version}</tag><!-- docker默认使用pom版本 -->
           <!-- 使用maven setting.xml里的配置 -->
           <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
           <buildArgs>
             <WEB_PATH>./target/${project.artifactId}</WEB_PATH>
           </buildArgs>
         </configuration>
       </plugin>

3、插件不支持1.6版本的,可以使用1.8版的,然后编译版本指定对应的, 如下:

<maven.compiler.source>1.6</maven.compiler.source>

<maven.compiler.target>1.6</maven.compiler.target>

4、构建镜像、推送镜像

mvn clean package dockerfile:build dockerfile:push -e


这里就描述了一种应用的k8s的部署方法,怎样建立一个属于自己的docker 镜像,同时在使用这个镜像时的过程和注意的事项,希望能给大家一些参考。




相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
大数据 Python
Python 采集87个手绘风格PPT模板
Python 采集87个手绘风格PPT模板
226 1
|
Docker 容器
docker部署mongodb-exporter
docker部署mongodb-exporter
1421 0
docker部署mongodb-exporter
|
存储 Oracle 前端开发
MyCat-简介-MyCat 的使用场合及下载 | 学习笔记
快速学习 MyCat-简介-MyCat 的使用场合及下载
MyCat-简介-MyCat 的使用场合及下载 | 学习笔记
|
存储 缓存 监控
常用的mysql监控指标
常用的mysql监控指标
5640 0
|
存储 安全 文件存储
通过HFS低成本搭建NAS,并内网穿透实现公网访问
通过HFS低成本搭建NAS,并内网穿透实现公网访问
699 0
|
数据可视化 定位技术
OKR:如何将战略目标拆解成可执行的团队任务
在现代职场中,方向不明和目标模糊常使团队陷入困境。OKR(目标与关键结果)的引入,如同“人生GPS”,不仅让工作更加有序,还帮助团队重拾奋斗的意义。通过明确大方向、拆解目标及搭建透明看板,OKR实现了目标清晰、过程透明、结果可衡量,有效提升了团队的执行力和士气。
678 1
OKR:如何将战略目标拆解成可执行的团队任务
|
存储 安全 数据库
阿里云最新域名注册和续费、企业邮箱、云虚拟主机收费标准与价格参考
域名注册和续费以及企业邮箱和云虚拟主机是很多用户上云第一步需要购买的产品,从2024年9月1日开始,全球域名又迎来了一波价格上调,目前阿里云的.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,不过企业新用户注册有1元购等活动。企业邮箱目前活动价540.00元/1年起,云虚拟主机独享基础增强版月付49元/1个月起,年付588元/1年起。本文为大家整理汇总了截止目前,阿里云域名注册和续费及转入收费标准、企业邮箱收费标准与活动价格、云虚拟主机最新收费标准,以供参考。
|
NoSQL 测试技术 Redis
第一次面试总结 - 迈瑞医疗 - 软件测试
本文是作者对迈瑞医疗软件测试岗位的第一次面试总结,面试结果非常好,但面试过程中没有提问太多技术性问题,主要围绕个人介绍、互相了解、个人规划和项目亮点进行,因此作者认为这次面经的学习意义不大。作者还提到了实习岗位的待遇和工作内容,以及对不同阶段求职者的建议。
509 2
|
SQL 网络协议 安全
有哪些常见的网络攻击类型?
【8月更文挑战第8天】
990 15
|
XML Web App开发 数据挖掘
Postman接口测试工具全解析:功能、脚本编写及优缺点探讨
文章详细分析了Postman接口测试工具的功能、脚本编写、使用场景以及优缺点,强调了其在接口自动化测试中的强大能力,同时指出了其在性能分析方面的不足,并建议根据项目需求和个人偏好选择合适的接口测试工具。
687 1