传统应用镜像使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 这里就描述了一种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 镜像,同时在使用这个镜像时的过程和注意的事项,希望能给大家一些参考。




相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Cloud Native 虚拟化 云计算
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
452 0
|
存储 缓存 弹性计算
阿里巴巴开源 容器镜像加速技术DADI 上手指南
阿里资深技术专家在阿里云开发者社区特别栏目《周二开源日》直播中,介绍刚于3月份开源的容器镜像加速器项目 DADI ,并带大家快速上手使用。本文为直播内容文字整理,看直播回放,请点击文首链接~
阿里巴巴开源 容器镜像加速技术DADI 上手指南
|
存储 缓存 Kubernetes
秒级启动万个容器,探秘阿里云容器镜像加速黑科技
阿里云容器与存储团队展开合作,利用DADI加速器支持镜像按需读取和P2P分发,实现3.01秒启动10000个容器,完美杜绝容器冷启动的数分钟漫长等待,以及镜像仓库大规模并行分发场景下的网络拥堵。
5152 0
秒级启动万个容器,探秘阿里云容器镜像加速黑科技
|
3月前
|
云计算 开发者 Docker
揭秘云计算中的容器化技术——Docker的深度解析
【10月更文挑战第6天】揭秘云计算中的容器化技术——Docker的深度解析
|
8月前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器技术的融合
【5月更文挑战第14天】 在当今快速发展的软件行业中,持续集成、持续部署(CI/CD)和微服务架构已成为提高软件交付速度和质量的关键。本文将探讨如何通过结合DevOps理念和容器技术,构建一个高效、稳定且可扩展的云基础设施。我们将深入分析Docker和Kubernetes在这一过程中的核心作用,以及它们如何帮助实现自动化运维和微服务管理,从而推动企业IT运营的现代化。
|
8月前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器技术的结合
【5月更文挑战第12天】 在当今快速发展的信息技术时代,企业需要灵活、快速地响应市场变化并持续交付高质量的软件产品。本文将探讨如何通过结合DevOps文化和容器技术来构建一个高效且稳定的云基础设施。我们将讨论DevOps的核心概念及其如何加速开发周期,以及容器技术如Docker和Kubernetes如何提供一致性、可移植性和扩展性。最后,文章将介绍实际案例,展示这种结合如何在现代运维实践中实现自动化部署、持续集成和微服务架构管理。
|
8月前
|
监控 测试技术 虚拟化
Docker的介绍及与传统虚拟化技术的区别
Docker是开源的容器化平台,用于构建、分发和运行容器化应用。它包含Docker镜像(只读模板)、容器(运行实例)和引擎(运行时环境)。Docker提供灵活性、轻量级、隔离性和可扩展性,便于应用在不同环境一致运行。其拥有活跃的开源生态系统和丰富的资源。
75 1
|
8月前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器技术融合实践
【5月更文挑战第31天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和持续交付的需求。本文探讨了将DevOps理念与容器技术相结合,构建一套高效、稳定且易于管理的云基础设施的实践方法。通过案例分析和技术选型,展示了如何实现自动化部署、监控和扩展,以及如何提高系统的可靠性和安全性,最终实现运维效率的显著提升。
|
8月前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。
|
存储 Dragonfly 缓存
带你读《2022龙蜥社区全景白皮书》——5.6.3 容器镜像大规模分发技术Nydus
带你读《2022龙蜥社区全景白皮书》——5.6.3 容器镜像大规模分发技术Nydus
182 5

热门文章

最新文章