gpt4 book ai didi

python - 为多个 python 应用程序重用 Docker 镜像

转载 作者:行者123 更新时间:2023-12-01 01:44:47 25 4
gpt4 key购买 nike

我对 Docker 的整个世界都很陌生。实际上,我正在尝试为不同的 python 机器学习应用程序建立一个环境,这些应用程序应该在自己的 docker 容器中相互独立地运行。由于我并不真正理解使用基础镜像并尝试扩展这些基础镜像的方式,因此我为每个新应用程序使用一个 dockerfile,它定义了我使用的不同包。它们都有一个共同点 - 它们使用命令 FROM python:3.6-slim 作为基础。

我正在寻找一个起点或方法,可以轻松扩展此基础镜像以形成一个新镜像,其中包含每个应用程序所需的各个包,以节省磁盘空间。现在,每个图像的文件大小约为。 1GB,希望这可以成为减少数量的解决方案。

File Size for each Docker image

最佳答案

无需详细了解 Docker 的不同存储后端解决方案(请查看Docker - About Storage Drivers以供引用),docker 会重用镜像的所有共享中间点。

话虽如此,即使您在docker images输出中看到[1.17 GB, 1.17 GB, 1.17 GB, 138MB, 918MB],但这并不意味着使用存储中的总和。我们可以这样说:

sum(`docker images`) <= space-in-disk

Dockerfile 中的每个步骤都会创建一个层。

让我们采用以下项目结构:

├── common-requirements.txt
├── Dockerfile.1
├── Dockerfile.2
├── project1
│   ├── requirements.txt
│   └── setup.py
└── project2
├── requirements.txt
└── setup.py

使用Dockerfile.1:

FROM python:3.6-slim
# - here we have a layer from python:3.6-slim -

# 1. Copy requirements and install dependencies
# we do this first because we assume that requirements.txt changes
# less than the code
COPY ./common-requirements.txt /requirements.txt
RUN pip install -r requirements
# - here we have a layer from python:3.6-slim + your own requirements-

# 2. Install your python package in project1
COPY ./project1 /code
RUN pip install -e /code
# - here we have a layer from python:3.6-slim + your own requirements
# + the code install

CMD ["my-app-exec-1"]

使用Dockerfile.2:

FROM python:3.6-slim
# - here we have a layer from python:3.6-slim -

# 1. Copy requirements and install dependencies
# we do this first because we assume that requirements.txt changes
# less than the code
COPY ./common-requirements.txt /requirements.txt
RUN pip install -r requirements
# == here we have a layer from python:3.6-slim + your own requirements ==
# == both containers are going to share the layers until here ==
# 2. Install your python package in project1
COPY ./project2 /code
RUN pip install -e /code
# == here we have a layer from python:3.6-slim + your own requirements
# + the code install ==

CMD ["my-app-exec-2"]

这两个 docker 镜像将与 python 和 common-requirements.txt 共享层。当构建具有大量繁重库的应用程序时,它非常有用。

要编译,我会这样做:

docker build -t app-1 -f Dockerfile.1 .
docker build -t app-2 -f Dockerfile.2 .

因此,请认为在 Dockerfile 中编写步骤的顺序很重要。

关于python - 为多个 python 应用程序重用 Docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com