“docker-app”实用工具分享,大大提高 Compose 文件复用率
本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!
Docker Compose 在开发人员中非常流行,它用来描述应用程序。目前,GitHub 上有超过30万个 Docker Compose 文件。通过在 docker-compose.yml 文件中对一组服务进行描述,就可以在 Docker 上用一条命令轻松的启动一个复杂的多服务应用程序(或简单的单服务应用程序)。这种易用性使得 Docker Compose 非常适合开发团队快速开展项目。
随着时间的推移,Compose 不断发展并添加了许多功能可以在将相同的应用程序部署到生产环境时提供帮助,例如,指定大量副本、内存资源限制或自定义系统日志服务器。但这些属性可能会跟您自己的环境有所差异。有许多不同的策略来解决这个问题,但是最常见的就是依赖于复制和粘贴。例如,为在不同环境中运行的同一应用程序维护多个 Compose 文件是相当常见的,但这会导致了两个问题:
- 我们一直都在分享 Docker 镜像,但却没有一个很好的方法来共享使用它们的多服务应用程序;
- 开发人员和运维人员很难围绕 Compose 文件进行协作。这淡化了在代码中描述应用程序的其中一项关键优势 —— 即开发人员和操作人员使用同一个 Compose 文件的机会,并在产品投入生产之前捕获配置问题;
介绍 docker-app
解决这个问题的一种方法是通过构建一个与 Compose 相辅相成的工具来使它更容易用于共享和协作。请注意,这是实验性的,还有很多工作正在进行中,但我们希望获得早期采用者的反馈和意见,这会:
- 使基于Compose 的应用程序可以共享在 Docker Hub 和 DTR 上;
- 支持在应用程序描述和每个环境设置之间更紧密的关注点分离;
该实现包含一些额外的元数据文件和一个小型命令行工具。让我们来举个简单的例子。
使用下面的 Compose 文件。它启动一个HTTP服务器,当触发配置的端口时,它会显示出指定的文本。
version: '3.6' services: hello: image: hashicorp/http-echo command: ["-text", "hello world"] ports: - 5678:5678
用 docker-app 命令安装,让我们基于这个 Compose 文件创建一个应用程序包:
$ docker-app init --single-file hello $ ls docker-compose.yml hello.dockerapp
这个应用程序包只是一个文本文件(或者是一个目录),在这个例子中叫做 hello.dockerapp。它包含三个YAML文档:
- 一些元数据
- Compose 文件
- 应用程序的一些设置
它应该是这样的:
# This section contains your application metadata. version: 0.1.0 name: hello description: "" maintainers: - name: yourusername email: "" targets: swarm: true kubernetes: true -- # This section contains the Compose file that describes your application services. version: '3.6' services: hello: image: hashicorp/http-echo command: ["-text", "hello world"] ports: - 5678:5678 -- # This section contains the default values for your application settings. {}
让我们编辑设置部分(替换 {})并为我们的应用程序添加以下默认值:
port: 5678 text: hello development version: latest
然后修改 Compose 文件部分,添加一些变量:
version: '3.6' services: hello: image: hashicorp/http-echo:${version} command: ["-text", "${text}"] ports: - ${port}:5678
最后,您可以通过使用所提供的默认值渲染 Compose 文件来进行测试。
$ docker-app render version: "3.6" services: hello: command: - -text - hello development image: hashicorp/http-echo:latest ports: - mode: ingress target: 5678 published: 5678 protocol: tcp
请注意,这些变量已经被设置值替换。之后,您可以像使用其他 Compose 文件一样来使用该 Compose 文件了。您可以将其保存到磁盘或 Docker 应用栈中亦或是使用 docker-compose 命令来启动应用程序。
$ docker-app render | docker-compose -f – up
这就是它有趣的地方。我们可以在运行时使用 --set 选项来覆盖这些设置。让我们指定不同的选项并再次运行渲染:
$ docker-app render --set version=0.2.3 --set port=4567 --set text="hello production" version: "3.6" services: hello: command: - -text - hello production image: hashicorp/http-echo:0.2.3 ports: - mode: ingress target: 5678 published: 4567 protocol: tcp
请注意在生成的 Compose 文件中对端口和版本进行更改。
如果你愿意,你可以创建一个独立的配置文件来存储这些设置。 让我们用以下内容创建prod.yml
:
version: 0.2.3 text: hello production port: 4567
然后,您可以使用该配置文件显示 Compose 文件,如下所示:
$ docker-app render -f prod.yml
这样就可以很容易地为不同的环境单独的设置文件了,从而减少了复制整个 Compose 文件的需要。
如果您想要超越hello world,我们还准备了一些更高级的例子。
您可以在 Docker Compose 中使用环境变量支持来实现与上述类似的内容,但需要您自己编写工具来提供一个不错的用户界面。有了上述惯例,我们可以在上面创建更有趣的东西。 例如,我们可以构建相当有趣的自省工具,就像下面所示的那样,我们计划将简单的变量替换转换为更复杂的模板。
检查和部署应用程序包
docker-app 命令不仅提供了用不同设置来渲染 Compose 文件的方法。它还提供了一些实用工具来与它们进行交互。例如,如果有人给你一个 .dockerapp,这时你可以很容易地了解它的信息,特别是在运行时发现哪些设置是可用的,而不需要读取任何包代码。
$ docker-app inspect hello 0.1.0 Maintained by: gareth A hello world example of a Docker application package. Setting Default ------- ------- port 8080 text hello world version latest
一旦准备好部署应用程序的一个版本,您就可以使用子命令进行部署了。它的工作方式与 docker 应用栈的部署命令完全相同,因此您应该很熟悉这一点。例如,如果您使用的是Docker Desktop 或 Docker EE,那么您就可以将应用程序部署到 Kubernetes,同时覆盖一些暴露的设置。
$ docker-app deploy --set port=4567 --orchestrator=kubernetes
docker-app 还有很多实用的工具,你可以在内置的帮助信息中找到,或者等待后续的文章推送。
感兴趣吗?
如果您感兴趣的话,可以浏览 https://github.com/docker/app 来访问 GitHub 仓库。您将会看到基本的文档和几个示例,以及下载最新版本(针对Windows、macOS或Linux)和应用程序源代码的说明。如果您在有任何问题、想法都可以在这个镜像仓库中提交给我们。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
湖北阿里云授权中心分享关于云服务器的相关问答
关于阿里云服务器大家有很多的疑问,最近武汉捷讯技术的小编根据大家的反馈,收集了一些大家都比较关注的问题。今天就给大家简单的回答一下。期待大家指正。 1、 问:阿里云共享虚拟主机,阿里云服务器多少钱? 答:阿里云服务器的相关配置不同,价格也不相同呢。比如企业级相较于入门级价格就偏贵,然后CPU和带宽不同,价格也有差异。下面是阿里云官网上价格简单的比较,大家可以参考一下: 企业级: 入门级: 2、 问:阿里云后台启动阿里云esc服务器无法启动,怎么办? 答:造成服务器无法启动的原因有很多,需要一一排除。一般来讲可以通过以下两种方式登录服务器再试试。 1)远程桌面连接(MicrosoftTerminalServicesClient,MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。 2)管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。 使用远程桌面连接(MSTSC)登录实例 a、打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键...
- 下一篇
弹性计算双周刊 第 8 期
【最新动态】 6月25日,由LFAsia, LLC主办的全球开源顶级盛会LinuxCon + ContainerCon + CloudOpen(LC3)在北京国家会议中心召开。来自国内外的开发人员、架构师、系统管理员、DevOps专家、商业领袖等数千名专业人士汇聚一堂。 阿里云研究员褚霸在大会当天同多位业界资深大咖同台时交流表示,阿里发展到今天,计算能力转化为普化的能力并且形成数据在云上,纵然极具挑战,但是也在不断增强阿里的技术能力,促进经验的积累。 阿里云ECS弹性计算作为计算能力的基础,今年做的最重要的2件事 第一,在芯片和软硬件一体化系统层面不断的挑战创新,比如我们推出的弹性裸金属服务器(神龙)以及自研异构计算高密度FPGA板卡AliFPGA等。第二,基于阿里云近些年在云原生领域积累的经验,产品创新的同时持续优化用户体验,在提升计算
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池