【问题标题】:Multiple Docker containers using identical Dockerfiles使用相同 Dockerfile 的多个 Docker 容器
【发布时间】: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


【解决方案1】:

你可以建立一个图像,而不是使用

#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

码头工人撰写

  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2016-12-23
    • 2016-10-28
    • 2018-02-05
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多