簡體   English   中英

如何將 python 庫從主機共享到多個 docker 容器?

[英]How to share python libraries from host to multiple docker containers?

我們設置了多個運行 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 環境中,您可能會運行:

python3 -m venv venv1
./venv1/bin/pip install ./requirements-common.txt
./venv1/bin/pip install ./some_repo_1/requirements.txt
./venv1/bin/uvicorn ...
# and similarly for venv2, some_repo_2

您可以構建自己的中間 Docker 映像,該映像僅包含常用庫:

FROM python:3.8.5-slim
WORKDIR /app
COPY requirements-common.txt .
RUN pip install -r requirements-common.txt
docker build -t my/app-base .

然后,當您構建每個應用程序的映像時,您可以將其作為基礎映像並預先安裝該庫集。 Docker 分層的工作方式,底層庫集將在各種派生圖像之間共享。

FROM my/app-base
# Inherits WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 81
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "81"]

Compose 對此模式沒有任何特定的支持。 如果中間映像僅包含一組很少更改的預安裝庫,則最簡單的方法是根據需要手動docker build ,並按原樣使用問題中的docker-compose.yml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM