使用相同Docker文件的多个Docker容器
在我一直从事的项目中,有几个微服务,每个都是从自己的Dockerfile构建的。其中四个的DockerFile完全相同:使用相同Docker文件的多个Docker容器,docker,docker-compose,dockerfile,microservices,Docker,Docker Compose,Dockerfile,Microservices,在我一直从事的项目中,有几个微服务,每个都是从自己的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 --syste
#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构建的
有人建议我对这些相同的Dockerfiles“做点什么”,但我不确定其中是否有任何意义
一方面,这显然是重复的代码,我想我可以为所有四个服务使用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
#Dockerfile已替换
FROM python:3.7
RUN pip install pip --upgrade
RUN pip install pipenv
RUN mkdir /code
WORKDIR /code
RUN pipenv install --system --deploy
docker compose
您可以创建一个自定义基本映像,该映像就是此映像。出于此目的,您将无法摆脱单独的Dockerfile,但您的通用代码将驻留在基本映像的Dockerfile中。该Dockerfile缺少将应用程序代码添加到映像中的
COPY
行,和CMD
行来说明如何运行它。我会将其视为或多或少需要的样板文件,很像setup.py
文件,而不必担心重复数据消除。@DavidMaze我想你可能是对的。还有一个docker-compose.yml文件,其中包含代码的卷被添加到每个服务中。命令也在这里定义。
service1:
container_name: name1
image: yourimage
volumes:
- ./service1/files/:/code
service2:
container_name: name2
image: yourimage
volumes:
- ./service2/files/:/code
service3:
container_name: name3
image: yourimage
volumes:
- ./service3/files/:/code