Каталог context:
- это каталог в вашей хост-системе, который включает Dockerfile
. Это тот же каталог, который вы передаете docker build
, и часто это просто текущий каталог .
.
В Dockerfile Docker может кэшировать отдельные шаги сборки, так что он не повторяет их, но только до тех пор, пока не достигнет точки, где что-то изменилось. Это «что-то» может быть измененной RUN
строкой, но в точке вашего COPY
, если какой-либо файл вообще изменится в вашем локальном дереве исходных текстов, что также сделает недействительным кеш для всего после него.
По этой причине типичный Dockerfile имеет несколько «фаз»; Вы можете повторить этот шаблон и на других языках. Вы можете реструктурировать свой Dockerfile в следующем порядке:
# 1. Base information; this almost never changes
FROM python:3.6-slim-buster AS build
MAINTAINER ABC
ENV PYTHONUNBUFFERED 1
WORKDIR /ABC
# 2. Install OS packages. Doesn't depend on your source tree.
# Frequently just one RUN line (but could be more if you need
# packages that aren't in the default OS package repository).
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
build-essential unzip libxrender-dev libpq-dev
# 3. Copy _only_ the file that declares language-level dependencies.
# Repeat starting from here only if this file changes.
COPY requirements.txt .
RUN pip install -r requirements.txt
# 4. Copy the rest of the application in. In a compiled language
# (Javascript/Webpack, Typescript, Java, Go, ...) build it.
COPY . .
# 5. Explain how to run the application.
EXPOSE 8000
CMD python manage.py migrate && \
python manage.py runserver 0.0.0.0:8000