在不同的docker容器之间共享python中的变量
Posted
技术标签:
【中文标题】在不同的docker容器之间共享python中的变量【英文标题】:Share variables in python between different docker containers 【发布时间】:2020-03-05 17:11:56 【问题描述】:我有一个在 docker 容器中运行的 python 应用程序。在我的应用程序中,我正在缓存一些对象,因为它们的创建时间太大而无法在每次使用它们时创建它们。我现在想生成相同图像的多个容器来处理可能的负载。该应用程序实际上是一个提供 API 的网络服务器。但是,每个容器的缓存对象都是相同的,所以我在想是否可能有一些 docker IPC 或任何允许我存储和使用这些对象的相同实例的功能,所以我没有任何开销内存中相同对象的副本。有什么方法可以实现吗?
【问题讨论】:
如果你在进程 fork 之前创建对象,它们将在内存中获得对象的副本。为什么您的对象创建缓慢?根据您的代码,最好只缓存对象创建的缓慢部分而不是整个对象本身。这将为您提供更多关于如何存储缓存的选项。 对象创建速度很慢,因为这些对象是机器学习模型,其中每个对象可能高达几百兆字节。创建也需要按需进行,因为我不一定需要所有可能的对象。 也许你可以腌制对象并存储在 memcached 中 Docker 在这里不会直接帮助您,但它确实可以让您轻松地与其他容器一起运行专用缓存服务器(Redis、Memcached)。 Python 3.8 中有一些新的东西可能适合我的需要:link 我会尝试设置一个原型,看看它是如何工作的。 【参考方案1】:容器都可以共享同一个卷挂载。这是一种在 Docker 容器之间共享数据的轻量级方式。
例如,我们的“服务器”可以简单地将数字附加到文件中:
#!/bin/bash
ID="$RANDOM"
while true ; do
echo $ID >> /shared.txt
sleep 1
done
然后我们创建一个 Dockerfile
FROM ubuntu:18.04
COPY main.sh /main.sh
CMD ["bash", "/main.sh"]
还有一个 docker-compose.yml 文件:
version: '3'
services:
one:
build: ./
volumes:
- ./shared.txt:/shared.txt
two:
build: ./
volumes:
- ./shared.txt:/shared.txt
注意两个容器是如何挂载同一个文件的。他们每个人都会看到相同的东西。
使用docker-compose up
运行它,在一个单独的窗口中您将看到shared.txt 的以下输出:
25277
24626
25277
24626
25277
24626
25277
24626
25277
两个容器都可以写入同一个文件。您可以轻松地将其扩展到目录,以便拥有多个缓存对象。
【讨论】:
以上是关于在不同的docker容器之间共享python中的变量的主要内容,如果未能解决你的问题,请参考以下文章
在不同 docker-compose 文件中描述并在不同 docker-machines 中运行的容器之间创建 NFS 共享