写点什么

Caicloud 企业应用 Docker 实操圣斗士技能 GET

  • 2020-03-12
  • 本文字数:1470 字

    阅读完需:约 5 分钟

Caicloud企业应用Docker实操圣斗士技能GET

本报告以技术栈 JAVA 为例,列举并解释了一些面向 Docker 进行应用程序开发和系统搭建中所需要注意的问题和技巧,以及 Caicloud 平台在 Docker 管理和帮助企业应用向 Docker 转化中的作用。由于应用程序千差万别,应用场景层出不穷,本文仅起到抛砖引玉的作用。

Java 栈

War 包在 Tomcat 或 Jetty 下的加载方式。


JAVA 应用的经典交付形态是 WAR 包,在 Docker 下使用 Tomcat 或 Jetty 来进行 WAR 包的部署可以有两种方式:


1.将 WAR 包放到 Docker 镜像中:这种好处是产生的 Docker 镜像自包含,发布时不需要再发布独立的 WAR 包。Dockerfile 例子如下:


FROM jetty:7.0MAINTAINER xyzADD sample.* /usr/local/jetty/webapps/
复制代码


这种方法的缺点是每次更新 WAR 包需要重新构建 Docker 镜像。


1.将 WAR 包作为外部数据卷挂载:不将 WAR 包放在镜像里,这种方法的好处是每次 WAR 包更新,Docker 镜像不需要更新。但是需要额外的 WAR 包发布机制。考虑到目前应该有 WAR 包发布机制,此方案可能更为灵活和熟悉。但这种方案的缺点就是 Docker 的可移植性受到损害,因为每个环境下必须要在宿主机的指定路径下有 WAR 包,使得 Docker 可以对其进行挂载。

JAVA 发布的 Sidecar 模式

Caicloud 的容器组的概念保证容器组中的容器可以做到:


1.任何时候都运行在同一个宿主机上


2.共享同样的外部挂载数据卷


这两个特性使得我们可以实现如下的 sidecar 模式:



这样取得了一箭双雕的好处:



(图片来源于网络)


由于没有将应用程序的WAR包构建到Jetty容器中,使得应用的版本管理和Jetty等中间件的版本管理可以分开独立地进行。例如,如果Jetty的版本需要升级,我们不需要重新构建N个镜像(假设有N个不同的应用或WAR包)。


另一方面,通过使用 sidecar 来“搬运”应用 WAR 包,我们又不用担心可移植性的问题:只要把 app-sidecar 容器和 Jetty 容器定义在一个容器组中,Caicloud 会保证应用 War 会一直“跟着 Jetty 容器跑”。

在开发模式下使用 Docker Jetty

上述使用 War 包的方法是将 Docker 作为软件发布的载体。有些时候开发者也会使用 Docker 作为本地开发的环境(在本地开发修改代码,同时在本地以 Docker 的形式运行当前代码)。此时需要注意的是,如果本地的代码文件是通过 COPY 或 ADD 加入到 Docker 镜像中,那么哪怕在 Docker 内使用 mvn jetty:run, mvn 也无法实时地反应本地文件、代码的变化。一个解决方法是通过挂载数据卷的方式来连接到本地的代码文件。

Docker Jetty 模式下的日志

在非 Docker 模式下,Jetty 的日志会根据 Jetty 的配置文件写到指定的位置,例如:/var/log/jetty。在 Docker 模式下,例如使用官方的 Jetty 镜像,这个日志文件会被完全取消,例如在 Jetty 9.2.10 的 Dockerfile 中:sed -i ‘/jetty-logging/d’ etc/jetty.conf


这样,Jetty 的日志会写到标准输出中从而被 Docker 或 Caicloud 平台进行统一的管理。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/t5liJm9JBlLCuqUk6lV_DA


2020-03-12 22:54488

评论

发布
暂无评论
发现更多内容

Vue网站自动提交百度链接

源字节1号

软件开发 后端开发 Vue网站

leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)

okokabcd

LeetCode 数据结构与算法

zookeeper-四字监控命令和工具

zarmnosaj

10月月更

干货|仅需3步完成酷炫数据可视化大屏制作!

云智慧AIOps社区

大前端 低代码 数据可视化 智慧大屏可视化 可视化大屏

旺链科技入选2022“科创中国”创新成果名单

旺链科技

区块链 金融科技 产业区块链

易操作、可观测、可扩展,EMQX如何简化物联网应用开发

EMQ映云科技

运维 物联网 IoT emqx 10月月更

如何低成本实现客户服务自动化?

Baklib

如何快速打造BI大屏进行数据赋能

力软低代码开发平台

大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

Lansonli

Filebeat 10月月更

两将军问题和TCP三次握手

有态度的马甲

TCP协议 两将军问题

如何优雅地编写一个高逼格的JS插件?

茶无味的一天

JavaScript 前端 js JS插件

如何从InfluxDB/OpenTSDB无缝连接到TDengine

TDengine

数据库 tdengine 开源 时序数据库

Flowable 中 ReceiveTask 怎么玩?

江南一点雨

Java springboot workflow flowable JavaEE

【一Go到底】第九天---进制

指剑

Go golang 10月月更

智能合约系统开发Web3.0实现核心

薇電13242772558

智能合约

实时云渲染的关键技术是什么?

Finovy Cloud

人工智能 云渲染 实时渲染

【Nacos源码之配置管理 九】客户端获取配置数据的流程

石臻臻的杂货铺

nacos 10月月更

软件测试 | 测试开发 | Java or Python?测试开发工程师如何选择合适的编程语言?

测吧(北京)科技有限公司

测试

你好,广州!openGauss广州用户组招募计划正式开启

openGauss

【iOS逆向】某运营商签名算法分析

小陈

逆向思维 逆向 iOS逆向 逆向分析

【荣耀帐号服务FAQ】AuthorizationCode有效期是多久?

荣耀开发者服务平台

手机 服务 安卓 荣耀 honor

软件测试 | 测试开发 | Google 测试总监聊如何经营成功的测试职业生涯

测吧(北京)科技有限公司

测试

《编程的原则》读书笔记(二): 编程理论的三个思想和六个实现原则

Chares

软件工程 软件开发 编程原理 软件开发原则

DAG 任务调度与 go-streams 结合的应用实践

KaiwuDB

Zebec即将推出公链并开放节点申请,潜力几何?

西柚子

GitLab + Jenkins + Harbor 工具链快速落地指南

胡说云原生

DevOps gitlab cicd Harbor jenkins

ESP32-C3 应用程序的启动流程

矜辰所致

ESP32-C3 10月月更 ESP-IDF

具有资质的昆明等保测评公司新名单看这里!

行云管家

等保 堡垒机 等级保护

使用最小花费爬楼梯

掘金安东尼

算法 10月月更

C语言中的内存模型

C++后台开发

内存模型 C语言 C/C++ linux开发 C++开发

网络安全漏洞分析之远程代码执行

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

Caicloud企业应用Docker实操圣斗士技能GET_文化 & 方法_才云科技_InfoQ精选文章