Docker search 指定软件版本 dockerapp_docker

编译丨小东


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 命令来启动应用程序。