docker-compose什么时候使用当前生成的映像,何时重新制作本地映像?

时间:2019-12-13 01:31:40

标签: docker docker-compose dockerfile

使用这样的dockerfile

FROM python:3.5.5-alpine

ARG CONTAINER_HOME_DIR

ENV CONTAINER_HOME_DIR=$CONTAINER_HOME_DIR

WORKDIR $CONTAINER_HOME_DIR

COPY wall_e/src/requirements.txt .

RUN apk add --update alpine-sdk libffi-dev && \
    apk add freetype-dev && \
    apk add postgresql-dev && \
    pip install --no-cache-dir Cython && \
    pip install --no-cache-dir -r requirements.txt &&  \
    apk --update add postgresql-client


COPY wall_e/src ./

CMD ["./wait-for-postgres.sh", "db",  "python", "./main.py" ]

如果我随后将此docker-compose使用此dockerfile,则docker-compose何时确定需要重新创建将用于从该映像制作docker容器的docker映像?

如果我对wall_e/src/requirements.txt文件进行更改,它将重新制作docker映像,或者如果我对RUN行进行更改或对位于的任何文件进行更改,它将重新制作docker映像。在wall_e/src中,甚至完全更改COPY的行还是CMD的行?

让我们假设我正在使用docker-compose up,而我没有使用选项--force-recreate

2 个答案:

答案 0 :(得分:1)

一旦构建了映像,docker-compose将不会查看您的dockerfile。 它将使用该图像,并且仅应用其配置(docker-compose.yml)。

因此,假设您docker-compose up,然后编辑docker-compose.yml文件,requirements.txtdockerfile,而仅使用docker-compose .yml更改将被考虑在内。

如果您需要重建图像,则必须专门使用:

docker-compose restart

答案 1 :(得分:1)

除非1)指示这样做,否则2)如果命名的映像不存在,则Docker将不会重建映像。

话虽这么说,当您重建时,它将尝试根据其拥有的所有缓存信息进行重建,并且除非对dockerfile进行了修改或通过COPY引用的文件具有被修改。经过重新处理的步骤之后的所有后续步骤也将被重新处理,因为构建过程基本上是根据从dockerfile中先前步骤构建的子映像创建新的子映像。

但是,如果您指定—no-cache,它将重新处理dockerfile中的所有步骤。