Docker Compose 实战教学,教您如何运行、管理和升级分布式应用程序(二)

简介: 这篇文章是 Windows Dockerfile 系列文章中的一篇,我将介绍使用 Docker Compose 在 Docker 中运行、管理和升级分布式应用程序。 今天我将为大家带来本文的第二部分内容:使用 Docker Compose 在 Docker 中管理和升级分布式应用程序。

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散!


这篇文章是 Windows Dockerfile 系列文章中的一篇,我将介绍使用 Docker Compose 在 Docker 中运行、管理和升级分布式应用程序。 今天我将为大家带来本文的第二部分内容:使用 Docker Compose 在 Docker 中管理和升级分布式应用程序。点击下方标题,查看第一部分内容:

- Docker Compose 实战教学,教您如何运维分布式应用程序(一)


用 Compose 部署和管理应用程序

Docker Compose简单易用。 它与 Docker Desktop for Windows 捆绑在一起,您可以使用 Chocolatey 来安装 Docker Compose。

您可以使用“docker-compose”命令行和 Compose YAML 文件来管理您的应用程序。 使用关键命令“up”来部署应用程序、“down”来停止应用程序并删除所有容器以及“build”来构建镜像。

要使用 Compose 来运行应用程序,只需克隆镜像仓库,导航到该目录并使用“docker-compose up”命令即可:

git clone https://github.com/sixeyed/docker-on-windows.git

cd ./docker-on-windows/ch06/ch06-docker-compose

docker-compose up -d

如果未指定文件名,Compose 将查找名为 docker-compose.yml 的文件。 此目录中的 YAML 文件定义了 Docker Hub 上的公开镜像,如果您本地没有该镜像,那么 Compose 将提取 Docker Hub 上的公开镜像。

然后 Compose 按正确的顺序启动所有服务的容器来维护依赖关系。 Compose 中的“–d”命令与容器中的“docker container run - it”命令相同,都是在后台启动该容器。

该 docker-compose.yml 文件未指定任何服务的规模,因此它们都将使用默认值启动,即每个服务分配一个容器。Compose 文件是所需的状态,当你运行“up”时,Compose 会查看 Docker 引擎中的实际状态并创建它到达该状态时所需的状态。

使用“docker container ls”命令来检查正在运行的容器,您可以在这看到整个应用程序堆栈。所有容器都是由 Compose 生成的名称,并将当前目录名称添加到服务名称中,如下图所示:

screenshot

您可以使用 Compose 扩展应用程序的组件,前提是组件能够在多个实例中运行而不会相互影响。 消息处理程序设计为可以在动态环境中扩展运行,因此我们可以轻松地对扩展它们:

docker-compose up -d `  

 --scale nerd-dinner-save-handler=3 `

 --scale nerd-dinner-index-handler=2

这将为 Elasticsearch 索引处理程序添加第二个容器,为 SQL Server 保存处理程序添加另外两个容器。 它们正在运行连接到 NATS 的消息处理程序,由于它们是为扩展而设计的,因此它们将共享消息处理负载。


用 Compose 升级应用程序

您可以使用 Docker Compose 和新的 docker-compose-db-upgrade.yml 文件(浏览 https://github.com/sixeyed/docker-on-windows/blob/master/ch06/ch06-docker-compose/docker-compose-db-upgrade.yml 查看完整代码)来部署更新:

docker-compose -f docker-compose-db-upgrade.yml up -d

Compose 重新创建了数据库服务,删除了旧容器并从新镜像标签运行一个新的容器。新容器连接到与旧容器相同的卷,因此 SQL Server 中的所有数据都会保留,并且在数据库容器启动脚本运行时会添加新列。

数据库容器启动脚本请查看:https://github.com/sixeyed/docker-on-windows/blob/master/ch06/ch06-nerd-dinner-db/Initialize-Database.ps1

还有一些定义为依赖于数据库服务的其他服务,因为数据库服务的更改,因此也会重新创建这些服务。在这种情况下,Compose 还会将消息处理程序服务缩减为每个容器。

为什么 Compose 缩减了我已经明确扩展的服务呢?因为 Compose 文件是所需状态,并且我的更新文件没有指定任何服务规模,所以默认值为1。 当 Compose 看到运行状态规模过大时,它将删除容器来使服务符合所需状态。

这是将声明性部署与 Compose 文件混合并使用 –scale 选项进行命令式部署的副作用。

最好坚持声明性部署并通过 Compose 文件进行所有更新。该 Compose 文件与您的 Dockerfiles 和应用程序源一起处于源代码控制中。


用 Compose 覆盖拆分关注点

您还可以将应用程序定义拆分成多个 Compose 文件。拆分关注点非常方便,您可以将开发和生产的部署选项列入到单独的文件中,并为核心应用程序定义提供一个主要的文件。

以下就是我将应用程序定义拆分成的多个 Compose 文件:

  • “docker-compose.yml”定义了核心应用程序服务,其中包含适用于每种环境的选项;
  • “docker-compose.build.yml” 为自定义的 Docker 镜像添加了构建定义。这可以用于在开发人员和 CI 管道中的 docker-compose build,但在其他场景中不适用。将它放在一个单独的文件中可以保持核心 Compose 文件的整洁;
  • “docker-compose.local.yml” 添加了在本地运行应用程序的选项,将容器端口发布到主机上的随机端口;
  • “docker-compose.production.yml” 为生产部署添加配置,指定明确的端口进行发布和为卷映射主机目录;

用“-f”将多个文件组合在一起,如果这些文件具有相同配置部分的值,那么最新的文件将覆盖最早的文件。

因此,为了构建整个应用栈,我将运行:

docker-compose `  

 -f docker-compose.yml `

-f docker-compose.build.yml `

build

并在本地运行:

docker-compose `  

 -f docker-compose.yml `

-f docker-compose.local.yml `

up -d

这是构建应用程序定义的一种很好的方法,在一个地方设置所有环境,但每个环境的详细信息是独立的。

最后,您可以使用 Compose 文件将应用程序部署到生产环境。

相关文章
|
13天前
|
关系型数据库 MySQL API
|
8天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
59 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
27天前
|
缓存 监控 持续交付
|
7天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
7天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
9天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
9天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
20 1
|
1月前
|
JSON JavaScript 测试技术
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
【10月更文挑战第9天】使用Docker部署PPTist在线演示文稿应用
38 1
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
|
16天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
21天前
|
负载均衡 监控 开发者
深入浅出:掌握 Docker Compose 的高级用法
【10月更文挑战第22天】本文深入探讨了 Docker Compose 的高级用法,包括环境变量、服务扩展、网络配置和数据卷管理。通过实例详细介绍了如何利用这些功能提升开发效率和应用部署的灵活性。适合希望深入了解 Docker Compose 的开发者阅读。