我有一个部署过程,目前我是通过docker-machine
和docker-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服务中会是这种情况吗?
答案 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文件中获取详细信息,并将它们彼此附加。
一旦创建了此图像,就可以再次使用。因此,尽管一开始可能会很麻烦,但以后会派发股息。