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 文件将应用程序部署到生产环境。

相关文章
|
11天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
11天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
1天前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的协同实战
【5月更文挑战第25天】 在当今快速迭代的软件发布环境中,自动化运维成为确保部署效率和可靠性的关键。本文通过深入分析Ansible和Docker技术,探索它们如何协同工作以构建一个高效的自动化运维体系。文章不仅介绍了Ansible的配置管理功能和Docker容器化的优势,还详细阐述了将两者结合的实践策略,旨在帮助读者理解并实现更智能、更灵活的基础设施管理。
|
2天前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
30 4
|
3天前
|
Java 关系型数据库 Docker
docker打包部署spring boot应用(mysql+jar+Nginx)
docker打包部署spring boot应用(mysql+jar+Nginx)
|
4天前
|
Java Maven Docker
Docker化Spring Boot3应用:从镜像构建到部署
本文介绍了如何在Linux上通过命令行构建和运行Spring Boot 3服务的Docker镜像。首先,基于Ubuntu创建包含JDK 21的基础镜像,然后使用Maven打包Spring Boot应用。接着,构建服务镜像,将应用和依赖添加到镜像中,并设置工作目录和暴露端口。最后,利用docker-compose部署服务,挂载宿主机目录以方便更新静态文件。Docker简化了应用部署,确保了不同环境的一致性。
43 2
Docker化Spring Boot3应用:从镜像构建到部署
|
6天前
|
Cloud Native 测试技术 数据库
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
41 8
|
11天前
|
监控 安全 Cloud Native
【云原生之Docker实战】使用Docker部署Ward服务器监控工具
【5月更文挑战第11天】使用Docker部署Ward服务器监控工具
35 4
|
11天前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
20 2
|
11天前
|
测试技术 持续交付 Docker
Docker in Docker原理与实战
Docker in Docker原理与实战
10 0