我有一个在Docker容器中运行的python应用。在我的应用程序中,由于某些对象的创建时间太大而无法在每次使用它们时都创建它们,因此我正在缓存它们。现在,我希望生成同一图像的多个容器以处理可能的负载。该应用实际上是提供API的网络服务器。但是每个容器的缓存对象都是相同的,因此我在考虑是否可能有一些Docker IPC或任何允许我存储和使用这些对象的相同实例的功能,因此我在这方面没有任何开销内存中相同对象的副本。有什么方法可以实现吗?
这些容器都可以共享同一卷安装。这是在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
两个容器都可以写入同一文件。您可以轻松地将其扩展到目录,以便可以拥有多个缓存的对象。