如何从两个单独的Dockerfiles多阶段构建中扩展/继承/联接?

时间:2019-11-29 16:30:37

标签: docker docker-compose

我有一个部署过程,目前我是通过docker-machinedocker-compose实现的。 (我部署了多个相互关联的服务-一个是Django应用程序,另一个是resty-auto-ssl Docker映像(参考:https://github.com/Valian/docker-nginx-auto-ssl

我的docker-compose文件类似于:

services:
  web:

  nginx:

  postgres:

(注:我没有在生产中使用postgres,这仅是示例)。

我需要做的是基本上将所有这些捆绑到一个内置的Docker映像中。

每个服务引用一个不同的Dockerfile基,一个用于Django应用程序:

FROM python:3.7.2-slim

RUN apt-get update && apt-get -y install cron && apt-get -y install nano

ENV PYTHONUNBUFFERED 1

RUN mkdir /usr/src/app

WORKDIR /usr/src/app

COPY ./requirements.txt /usr/src/app/requirements.txt

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

COPY . /usr/src/app

RUN ["chmod", "+x", "/usr/src/app/init.sh"]

还有一个用于valian / docker-nginx-auto-ssl映像:

FROM valian/docker-nginx-auto-ssl

COPY nginx.conf /usr/local/openresty/nginx/conf/

从理论上讲,我可以将这两个Dockerfile合并为一个?将多级Docker构建(https://docs.docker.com/v17.09/engine/userguide/eng-image/multistage-build/#before-multi-stage-builds)用于结合的docker-compose服务中会是这种情况吗?

1 个答案:

答案 0 :(得分:1)

我不相信您可以连接映像,Dockerfile映像就像VM硬盘一样,就像我要将2个硬盘映像连接在一起一样。这些映像甚至可能是Linux的不同版本,现在甚至可能是Windows。如果您只需要一张映像,则可以通过像Alpine Linux这样的基本映像开始构建自己的映像,然后安装所需的所有依赖项。

但是,好消息是,您可以从Dockfile中使用图像来获取这些图像的来源,因此,为您完成了在Docker中放入内容的所有艰苦工作。

例如对于python位-> https://github.com/jfloff/alpine-python

然后使用nginx-auto-> https://github.com/Valian/docker-nginx-auto-ssl

因为nginx-auto-sll基于alphie-fat,所以我建议使用那个。然后从两个Docker文件中获取详细信息,并将它们彼此附加。

一旦创建了此图像,就可以再次使用。因此,尽管一开始可能会很麻烦,但以后会派发股息。