Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用相同Docker文件的多个Docker容器_Docker_Docker Compose_Dockerfile_Microservices - Fatal编程技术网

使用相同Docker文件的多个Docker容器

使用相同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构建的。其中四个的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构建的

有人建议我对这些相同的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