Разделяйте команды, используя разные «шаги RUN», каждый шаг будет пытаться использовать кэш предыдущего шага, как только одна строка изменяется, цепочка кеша становится недействительной, и все последующие строки выполняются, поэтому вы хотите сохранитьмедленно меняющиеся элементы сверху и часто меняющиеся снизу.
Например, содержимое вашего Dockerfile может иметь:
FROM python:2.7-alpine
RUN apk add --update bash curl
RUN apk add gcc make linux-headers musl-dev openldap-dev libxml2-dev libxslt-dev libffi-dev pcre-dev
RUN apk add cython
RUN pip install pandas
#RUN install your package/library
В приведенном выше примере вы увидитевыходные строки, подобные приведенным ниже (обратите внимание на те, которые говорят «Использование кэша»):
Sending build context to Docker daemon 56.83kB
Step 1/11 : FROM python:2.7-alpine
---> b630f364abf4
Step 2/11 : RUN apk add --update bash curl
---> Using cache
---> a611e4bbdbae
Step 3/11 : RUN apk add gcc make linux-headers musl-dev openldap-dev libxml2-dev libxslt-dev libffi-dev pcre-dev
---> Using cache
---> 87e91533771d
Step 4/11 : RUN apk add cython
---> Using cache
---> 47e0fd345aa8
Step 5/11 : RUN pip install pandas
---> Running in c57947f606e5
Каждая строка вывода «Использование кэша» указывает, что строка выше непосредственно не была выполнена, но результаты взяты из кэшированногоlayer.
В первый раз все будет выполнено, но это будет намного быстрее при следующих выполнениях (при условии, что все остальное остается неизменным на хосте).
Теперь вы можете "docker push: "в свой частный (или даже публичный) реестр и запускать другие сборки с помощью Dockerfile, который начинается с:
FROM <BASE IMAGE with pandas>:<TAG>
Above называется парадигмой «родительские / базовые изображения» и «строитель», вы можете прочитать больше на https://docs.docker.com/develop/develop-images/baseimages/
И в последнее время вы также можете иметь «многоэтапные сборки», которые по сути одинаковы, но упрощенный, так что вы можете использовать один Dockerfile: https://docs.docker.com/develop/develop-images/multistage-build/