本文首发自“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-echocommand: ["-text", "hello world"]ports:- 5678:5678

用 docker-app 命令安装,让我们基于这个 Compose 文件创建一个应用程序包:

$ docker-app init --single-file hello$ lsdocker-compose.ymlhello.dockerapp

这个应用程序包只是一个文本文件(或者是一个目录),在这个例子中叫做 hello.dockerapp。它包含三个YAML文档:

  • 一些元数据
  • Compose 文件
  • 应用程序的一些设置

它应该是这样的:

# This section contains your application metadata.version: 0.1.0name: hellodescription: ""maintainers:- name: yourusernameemail: ""targets:swarm: truekubernetes: true--# This section contains the Compose file that describes your application services.version: '3.6'services:hello:image: hashicorp/http-echocommand: ["-text", "hello world"]ports:- 5678:5678--# This section contains the default values for your application settings.{}

让我们编辑设置部分(替换 {})并为我们的应用程序添加以下默认值:

port: 5678text: hello developmentversion: latest

然后修改 Compose 文件部分,添加一些变量:

version: '3.6'services:hello:image: hashicorp/http-echo:${version}command: ["-text", "${text}"]ports:- ${port}:5678

最后,您可以通过使用所提供的默认值渲染 Compose 文件来进行测试。

$ docker-app renderversion: "3.6"services:hello:command:- -text- hello developmentimage: hashicorp/http-echo:latestports:- mode: ingresstarget: 5678published: 5678protocol: 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 productionimage: hashicorp/http-echo:0.2.3ports:- mode: ingresstarget: 5678published: 4567protocol: tcp

请注意在生成的 Compose 文件中对端口和版本进行更改。

如果你愿意,你可以创建一个独立的配置文件来存储这些设置。 让我们用以下内容创建prod.yml

version: 0.2.3text: hello productionport: 4567

然后,您可以使用该配置文件显示 Compose 文件,如下所示:

$ docker-app render -f prod.yml

这样就可以很容易地为不同的环境单独的设置文件了,从而减少了复制整个 Compose 文件的需要。

如果您想要超越hello world,我们还准备了一些更高级的例子。

您可以在 Docker Compose 中使用环境变量支持来实现与上述类似的内容,但需要您自己编写工具来提供一个不错的用户界面。有了上述惯例,我们可以在上面创建更有趣的东西。 例如,我们可以构建相当有趣的自省工具,就像下面所示的那样,我们计划将简单的变量替换转换为更复杂的模板。


检查和部署应用程序包

docker-app 命令不仅提供了用不同设置来渲染 Compose 文件的方法。它还提供了一些实用工具来与它们进行交互。例如,如果有人给你一个 .dockerapp,这时你可以很容易地了解它的信息,特别是在运行时发现哪些设置是可用的,而不需要读取任何包代码。

$ docker-app inspecthello 0.1.0Maintained by: garethA hello world example of a Docker application package.Setting Default------- -------port   8080text   hello worldversion 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)和应用程序源代码的说明。如果您在有任何问题、想法都可以在这个镜像仓库中提交给我们。

“docker-app”实用工具分享,大大提高 Compose 文件复用率相关推荐

  1. android office转pdf,怎么把安卓手机的PDF转换成Word?3款实用工具分享

    如今,手机已成为人们日常工作和生活中必不可少的伴侣.手机功能和服务的不断创新和升级促进了用户体验的不断提高.只要每天带手机出去,每个人都可以做任何事情.对于经常使用手机工作的朋友,很多时候需要把PDF ...

  2. 重启服务器之home下文件全没,小白宝典——树莓派实用工具分享(大神绕路)

    原标题:小白宝典--树莓派实用工具分享(大神绕路) 工欲善其事,必先利其器. 很多人的树莓派是不是安装好系统之后,就闲置起来了? 其实树莓派就像是我们平常所用的PC一样,除了基础的硬件之外,真正能够使 ...

  3. 今天把积累几年的49个实用工具分享出来,涉及各个方面的工具,进来看一看咯。

         电脑打开找东西发现积累的软件.pdf文档.一些好用的网址(实用工具&学习网站)还挺多的,今天呢就只发我写了好几天的关于软件这部分,每个软件我都会说明一下是干什么用的,怎么安装哈.这些 ...

  4. 2019实用工具分享:网络赚钱必备实用工具

    "工欲善其事,必先利其器",利用工具做事在互联网创业中是非常常见的,在你频繁执行同一个操作的时候,你选择用工具代替,并不是什么坏习惯,因为这样你可以腾出手再搞一个新的项目,充分利用 ...

  5. 独家 | A/B测试的定义、操作方法、案例与实用工具分享

    作者:Neil Patel 翻译:黄瑞迪校对:吴振东本文约6000字,建议阅读10+分钟 A/B测试是一个所有营销人员都应该使用的绝妙工具. 无论你做多少调研,每个促销活动都不能保证百分百成功. 这就 ...

  6. 实用工具分享-桌面美化软件Fences

    现在的上班一族每天工作都很繁忙,根本就没时间整理电脑桌面,电脑桌面图标杂乱找个东西还要花几分钟,有时候还出现误删的情况,桌面美化软件可以帮助你整理好电脑桌面文件,不常用的也会帮你统一放在一个文件夹里面 ...

  7. Windows实用工具分享篇(一)---Everything

    ​ 在工作中,有时候由于事情比较多的原因,会忘记一些自己以前所保存的文件的存放路径,当我们急需这些文件时,因为时间关系没法一个文件夹接着一个文件夹的地找,这时我们会想到Windows自带的文件搜索功能 ...

  8. (实用工具分享)网页元素截图工具

    这个工具是chrome的一个扩展程序,这个工具可以将一个标签的那个区域进行截图,安装成功后会在浏览器右上角登录框旁边生成图标. 使用方法 点击一下图标,然后将鼠标移动到页面,移动到一个页面上面的一个元 ...

  9. 实用工具分享——PDF阅读

    PDF阅读 现在常见的手册和电子书均为pdf,故而一款使用的pdf阅读器就显得很重要了. 本地PDF阅读器 本地PDF阅读推荐的是一款十分轻量级的阅读器,SumatraPDF,小巧,支持中文,适合于临 ...

最新文章

  1. 深蓝学院的三维点云课程:第一章
  2. 在 Ubuntu 14.04 Chrome中安装Flash Player(转)
  3. 《Python核心编程》第二版第36页第二章练习 续一 -Python核心编程答案-自己做的-...
  4. 参数 中_Python中函数的参数传递
  5. PS教程第二十五课:自由选区
  6. 英语口语Week16 Thursday
  7. T-SQL:毕业生出门需知系列(七)
  8. Amoeba 主从复制和读写分离
  9. PYTHON解析XML的多种方式效率对比实测
  10. 解决element-ui的el-select组件文字超过宽度时不出现横向滚动条问题
  11. jQuery 获取当前节点的html包含当前节点的方法
  12. 不用等微信官方!微信圣诞帽,我用Python就能搞定!
  13. Request method ‘PUT‘ not supported
  14. 2017-08-25阿里校招笔试题---菜鸟仓库
  15. 【Linux】echo打印命令
  16. czl蒻蒟的OI之路7
  17. 20050620 GNU Bison 中文手册翻译完成
  18. Cesium自定义编辑多边形
  19. 400Gbps 网络面临的挑战
  20. ERC-1155 标准

热门文章

  1. 无法开启计算机,Win7下鼠标右键无法开启计算机属性怎么办?
  2. 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表
  3. 如何自己塑封_全球市场三足鼎立,国内半导体封测业如何实现可持续发展?
  4. online游戏服务器架构—用户登录数据组织 .
  5. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  6. 手机安卓学习 内核开发
  7. Python学习3 字符串和相关常用函数
  8. 理性分散投资 收益袋袋平安
  9. 男人该知道的人生感悟(图)
  10. 面试风云录(01) - 怎样回答这两个问题?