首页 > 解决方案 > 并行运行 Docker 服务多次以利用具有多个 CPU 内核的计算机

问题描述

我有一个小型 Python 应用程序,它作为一个服务打包到一个撰写文件中。appdb

app服务的工作是使用来自(PostgreSQL)的数据运行一些空间计算,db并将一些结果与磁盘上的一些文件一起写入同一个数据库中。对于后一点,我使用绑定挂载作为卷,以便将文件保存在主机上。

我面临的问题是,基于样本数据集,我估计完成对数据库所有记录的计算的时间大约为 1 年......

我还注意到应用程序的 Python 脚本一次只使用一个 CPU 内核。这很好,因为我不习惯并行编程,也因为我依赖第三方软件来运行一些分析,而那个软件也是单线程的。

另一方面,我可以使用多 CPU 核机器 (60x)。我注意到每次启动撰写文件时,只有一个 CPU 内核处于活动状态。

因此,我提出了天真的问题;我可以利用 dockerization 来运行相同的app服务,因为那台机器上有很多可用的 CPU(或者可能少一点)?
请注意,该db服务只能存在一次并共享给这些多个相同的app服务。

如果是,如何正确有效地做到这一点?

我正在考虑在撰写文件中“复制粘贴”该app服务 50 次,每次都给它另一个名称,但这可能非常难看(!)。应该有更好的方法来做到这一点......也许来自主机?任何提示表示赞赏。我不是码头专家。

标签: dockerdocker-compose

解决方案


简而言之,这可以通过使用以下--scale选项来实现docker-compose up

docker-compose up --scale app=50 app

文档:https ://docs.docker.com/compose/reference/up/

这将启动 50 个app服务实例。

当然,如果应用程序访问唯一的数据库,则必须将应用程序设计为并行运行以避免麻烦。


Ubuntu 18.04(`5.4.0-81-generic x86_64 GNU/Linux`)的版本信息:
$ docker-compose --version
dockedocker-compose version 1.27.4, build 40524192

$ docker --version
Docker version 20.10.8, build 3967b7d

推荐阅读