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

Docker App应用 Docker App应用 这是一个实验特性。 实验性功能提供了对未来产品功能的早期访问。这些特性仅用于测试和反馈,因为它们可能在没有警告的情况下在不同版本之间更改,或者可以从将来的版本中完全删除。在生产环境中不得使用实验性功能。 Docker不支持实验特性。 要在Docker CLI中启用实验性功能,请编辑config.json文件并将“实验”设置为“已启用”。 要从Docker桌面菜单启用实验功能,请单击设置(macOS上的首选项)>命令行,然后启用启用启用实验功能切换。单击应用并重新启动。 有关D 阅读详情

640?wx_fmt=jpeg

出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散


说在前面


Docker Compose 在开发人员中非常流行,它用来描述应用程序。目前,GitHub 上有超过30万个 Docker Compose 文件。通过在 docker-compose.yml 文件中对一组服务进行描述,就可以在 Docker 上用一条命令轻松的启动一个复杂的多服务应用程序(或简单的单服务应用程序)。这种易用性使得 Docker Compose 非常适合开发团队快速开展项目。

&


随着时间的推移,Compose 不断发展并添加了许多功能可以在将相同的应用程序部署到生产环境时提供帮助,例如,指定大量副本、内存资源限制或自定义系统日志服务器。但这些属性可能会跟您自己的环境有所差异。有许多不同的策略来解决这个问题,但是最常见的就是依赖于复制和粘贴。例如,为在不同环境中运行的同一应用程序维护多个 Compose 文件是相当常见的,但这会导致了两个问题:


  • 我们一直都在分享 Docker 镜像,但却没有一个很好的方法来共享使用它们的多服务应用程序;

  • 开发人员和运维人员很难围绕 Compose 文件进行协作。这淡化了在代码中描述应用程序的其中一项关键优势 —— 即开发人员和操作人员使用同一个 Compose 文件的机会,并在产品投入生产之前捕获配置问题;

640?wx_fmt=png


介绍 docker-app


解决这个问题的一种方法是通过构建一个与 Compose 相辅相成的工具来使它更容易用于共享和协作。请注意,这是实验性的,还有很多工作正在进行中,但我们希望获得早期采用者的反馈和意见,这会:


  • 使基于Compose 的应用程序可以共享在 Docker Hub 和 DTR 上;

  • 支持在应用程序描述和每个环境设置之间更紧密的关注点分离;


该实现包含一些额外的元数据文件和一个小型命令行工具。让我们来举个简单的例子。

640?wx_fmt=png

使用下面的 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 文件

  • 应用程序的一些设置

640?wx_fmt=png


它应该是这样的:

 

# 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.

{}

640?wx_fmt=png


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


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

640?wx_fmt=png

检查和部署应用程序包

 

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 还有很多实用的工具,你可以在内置的帮助信息中找到,或者等待后续的文章推送。

640?wx_fmt=png

感兴趣吗?


如果您感兴趣的话,可以点击文尾处“阅读原文”访问 GitHub 仓库。您将会看到基本的文档和几个示例,以及下载最新版本(针对Windows、macOS或Linux)和应用程序源代码的说明。如果您在有任何问题、想法都可以在这个镜像仓库中提交给我们。

640?wx_fmt=png


点击下列标题,阅读更多干货



如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!

   640?wx_fmt=png


640?wx_fmt=gif点击下方“阅读全文”,了解详情

Dockerdocker基础命令和DockerFile 需要注意的是,上下文路径下不要放无用的文件,因为会一起打包发送给docker引擎,如果文件过多会造成这个过程缓慢的问题。sudo docker run -it --name 容器名字 --restart=always 镜像:标签 /bin/bash -c "/home/test/start.sh /home/test/"sudo docker run -it --name 容器名字 --restart=always 镜像:标签 /bin/bash -c "/home/test/start.sh" 阅读详情

相关推荐

Docker Compose YAML用技巧:锚点与引用实战

YAML作为现代云原生基础设施的核心配置语言,其用机制能显著提升配置管理效率。通过锚点(&)和引用(*)语法,开发者可以实现类似编程语言的变量抽象能力,这在容器编排领域尤为重要。以Docker Compose为例,当微服务数量激增时,配置用能减少90%的重代码量。该技术通过合并操作符(<<)实现配置深度组合,支持环境变量模板化、服务定义标准化等典型场景。在电商平台等杂系统中,合理运用YAML用可降低配置错误率,同时提升CI/CD流程的可靠性。本文详解的Docker Compose锚点技巧,正是解决

djph26741的博客 384

笔记:DockerDockerfile基础

文章目录Docker基本概念Docker安装常用命令容器操作示例Docker镜像Docker容器数据卷DockerfileDockerfile体系结构(保留字指令)Docker安装mysql示例本地镜像推送到阿里云 Docker基本概念 镜像:镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建多个容器 容器:容器是用镜像创建爱你的运行实例,它可以被启动、开始、停止、删除。每个容器都是相互隔离的 镜像与容器的关系类似于对象与类 Docker 面向对象 镜像 类 容器 容器 仓库:仓库是集中存放镜像文件的场所 仓库(Repository)和仓库注册服

Docker Compose中服务依赖错误的报错与修

Docker Compose服务依赖问题常见两类错误:依赖服务未就绪和依赖解析失败。本文提供诊断工具(如docker-compose logs和健康检查)和修策略,包括显式定义依赖关系、处理循环依赖和多文件管理。通过添加健康检查、延迟初始化等代码示例,解决服务启动顺序问题。同时给出性能优化建议,如资源分配和日志聚合。实战案例展示了Spring Boot应用连接MySQL失败的解决方案,通过调整健康检查参数和应用层重试逻辑,将启动成功率从45%提升至98%。

shejizuopin的博客 1544

Docker使用总结

一、Docker容器 1、创建容器 create 新建容器 docker@default:~$ docker create -it ubuntu c62f0a2b48e65831cf6b0875826a043f1e301603bb83733b9cea8852b848a015 docker@default:~$ docker ps -a CONTAINER ID IMAGE ...

lynn_001的博客 489

使用 Docker 镜像构建 App

简介:本文主要为大将讲解如何使用 Docker 镜像创建 App 以及如何更新镜像。 镜像下载、域名解析、时间同步请点击阿里巴巴开源镜像站 一、准备 AppDocker 镜像 1. 制作 Docker 镜像 根据自己的需求,用户可以使用官方镜像仓库中的镜像作为基础镜像,安装需要的软件或算法,制作成 Docker 镜像,完成运行环境的定制;制作镜像有两种方法: 使用 Dockfile 制作镜像 使用容器快速制作镜像 具体制作方法可参考文章Docker 镜像制作。 建议:在...

Aug_Spark的博客 251

Docker App完全指南:如何将Docker Compose应用变为可用资产并发布到Docker Hub

Docker App是一项强大的工具,它能帮助开发者将Docker Compose应用转换为可用、可分享的资产,并轻松发布到Docker Hub。本指南将带您了解如何使用Docker App实现这一目标,让您的应用分发和部署变得前所未有的简单高效。 ## Docker App工作流程概览 Docker App提供了完整的生命周期管理,从应用定义到最终运行,每个环节都有对应的命令支持。下图展示

gitblog_00722的博客 515

Docker 镜像、容器和 Docker Compose的区别

Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件,以下是对它们的详细解析及使用场景说明。镜像是只读模板,包含运行应用程序所需的代码、依赖、环境配置等。类似于“软件安装包”;容器是镜像的运行实例,包含独立的进程、文件系统和网络空间,类似“轻量级虚拟机”;Docker Compose​​​​定义用于定义和运行多容器应用的工具,通过 YAML 文件docker-compose.yml)配置服务、网络、卷等。​​

何哥的博客 2361

5个Docker App实用技巧:让你的Compose应用管理效率提升10倍

Docker App是GitHub加速计划中的重要工具,它能让你的Docker Compose应用更易于用,并能轻松在Docker Hub上分享。本文将分享5个实用技巧,帮助你高效管理Docker Compose应用,提升开发和部署效率。 ## 一、快速初始化应用定义:一键生成基础结构 使用`docker app init`命令可以快速创建应用定义结构,自动生成必要的配置文件。这个命令能帮你

gitblog_00761的博客 327

仅限内部分享Docker Compose环境隔离的4个高级技巧(附真实案例)

掌握Docker Compose的环境隔离技巧,有效解决多项目依赖冲突与配置混乱问题。本文分享4个高级实践方法,涵盖自定义网络、环境变量管理、服务间隔离与真实开发场景,提升部署安全与效率,值得收藏。

InstrFun的博客 692

Docker 学习:术语、使用、Compose、Swarm

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

freeking101的博客 6127

Docker App入门教程:3分钟学会打包你的第一个多服务应用

Docker App是一款强大的工具,能够让你的Docker Compose应用变得可用,并轻松在Docker Hub上分享。本文将带你快速掌握Docker App的核心功能,通过简单三步完成多服务应用的打包与运行。 ## 为什么选择Docker App? 在开发多服务应用时,我们常常面临配置杂、环境不一致、分享困难等问题。Docker App通过将Compose文件、元数据和参数统一打包

gitblog_00908的博客 1150

应用程序协作困难?看 Docker 应用程序包如何破解难题

 出品丨Docker公司(ID:docker-cn)编译丨小东每周一、三、五晚6点10分  与您不见不散说在前面在之前推荐的“docker-app实用工具分享大大提高...

Docker公司 258

【专家经验分享】:生产环境中Docker Compose变量默认值的最佳实践

掌握Docker Compose变量默认值配置技巧,提升环境管理效率。本文详解生产环境中变量优先级、.env文件应用与字段回退机制,确保多环境部署稳定可靠。合理设置默认值避免配置遗漏,提高项目可维护性,值得收藏。

Instrulink的博客 698

别再手动改配置了!用Docker Compose一键部署你的第一个Web应用(附完整YAML文件

本文详细介绍了如何使用Docker Compose一键部署Web应用,包含Nginx、Node.js和Redis的多容器配置。通过完整的YAML文件示例和高级配置技巧,帮助开发者解决环境不一致、依赖管理混乱等问题,提升部署效率和可靠性。

一名菜鸟攻城师 722

Podman Compose:无需 root 权限的 Docker Compose 兼容编排方案

容器编排是现代应用开发与交付的核心能力,其本质是通过声明式配置实现多容器服务的自动化部署、网络互联与生命周期管理。底层依赖于容器运行时对命名空间、cgroups 和镜像分层等 Linux 内核特性的封装。随着最小权限原则和零信任架构成为企业安全基线,传统 Docker 的 root 依赖守护进程(dockerd)暴露出权限集中、审计困难、多租户隔离弱等工程瓶颈。Podman Compose 作为原生 rootless 编排工具,用标准 docker-compose.yml 语法,依托 Podman 的用户

weixin_30307921的博客 369
上一篇: Docker EE 统一应用程序管理功能大揭秘,你想要的都在这里!
下一篇: 无惧失败,Docker EE 帮助企业快速试错
Docker公司
博客等级 码龄9年 306粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值