我们有一个运行python微服务的多个docker容器的设置。问题是许多库在容器中是冗余的。由于docker隔离,所有库都独立安装在每个容器中,这会增加docker映像的大小
那么,有没有一种方法可以让我跨多个容器共享python库,方法是将所有库安装在共享文件夹或任何其他解决方案中,使代码保持隔离,但允许使用共享库
Dockerfile1:
FROM python:3.8.5-slim
RUN apt-get update && \
apt-get install -y \
git openssh-server
# Avoid cache purge by adding requirements first
RUN git clone git@github.com:some_org/some_repo_1.git
WORKDIR ./some_repo_1/
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
EXPOSE 80
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
Dockerfile2:
FROM python:3.8.5-slim
RUN apt-get update && \
apt-get install -y \
git openssh-server
# Avoid cache purge by adding requirements first
RUN git clone git@github.com:some_org/some_repo_2.git
WORKDIR ./some_repo_2/
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt
EXPOSE 81
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "81"]
docker-compose.yml
version: "3.9"
services:
service_1:
build:
context: './some_repo_1/'
ports:
- '80:80'
service_2:
build:
context: './some_repo_2/'
ports:
- '81:81'
注意:我们必须部署许多不同的微服务docker容器,这些容器具有相似的依赖关系。因此,docker图像大小是一个主要问题
PS:我正在使用docker compose运行多个docker容器
假设您可以将您的需求拆分为一个“公共”集合,以及一些附加的每个应用程序依赖项。在非Docker环境中,您可以运行:
您可以构建自己的中间Docker映像,该映像只包含公共库:
然后,当您构建每个应用程序映像时,可以将其作为基础映像,并预先安装该库集。按照Docker分层的工作方式,底层库集将在各种派生图像中共享
Compose对此模式没有任何特定支持。如果中间映像仅由一组很少更改的预安装库组成,那么根据需要手动
docker build
它可能是最容易的,并按原样使用您在问题中遇到的docker-compose.yml
相关问题 更多 >
编程相关推荐