【发布时间】:2020-02-12 02:49:31
【问题描述】:
在我一直从事的项目中,有一些微服务,每个微服务都由自己的 Dockerfile 构建。其中四个的 Dockerfile 完全相同:
#Dockerfile
FROM python:3.7
RUN pip install pip --upgrade
RUN pip install pipenv
COPY Pipfile.lock /code/Pipfile.lock
COPY Pipfile /code/Pipfile
WORKDIR /code
RUN pipenv install --system --deploy
容器是用 docker-compose 构建的。
有人建议我对这些相同的 Dockerfile “做点什么”,但我不确定这是否有任何意义。
一方面,这显然是重复的代码,我想我可以只为所有四个服务使用一个 Dockerfile 副本(例如,根据相同的配方构建这四个容器),但另一方面 - 我想象一下,如果将来需要调整其中一张图像中的任何内容,则必须再次反转整个设置。
我在网上没有发现任何类似的案例。在这种情况下有什么“好的做法”吗?使用单个 Dockerfile 有什么好处(有什么好处吗?)?
【问题讨论】:
-
您可以为此目的创建一个自定义的 BASE IMAGE 镜像,您将无法摆脱单独的 Dockerfile,但您的通用代码将驻留在基础镜像的 dockerfile 中。
-
该 Dockerfile 缺少用于将应用程序代码添加到映像中的
COPY行,以及用于说明如何运行它的CMD行。我会将其视为或多或少需要的样板,就像setup.py文件一样,不用担心尝试对其进行重复数据删除。 -
@DavidMaze 我猜你可能是对的。还有一个 docker-compose.yml 文件,其中包含代码的卷被添加到每个服务中。命令也在那里定义。
标签: docker docker-compose dockerfile microservices