ускорение 'apt-get update' для ускорения сборки образов Docker - PullRequest
1 голос
/ 15 мая 2019

Я хочу добавить curl к образу Docker, и для этого я использую следующие команды в Dockerfile:

RUN apt-get update
RUN apt-get install curl ca-certificates -y

Моя проблема в том, что первоначальное обновление занимает довольно много времени (2 минуты), поэтому, пока я отлаживаю свой Dockerfile, итерация идет медленно. В частности, когда я делаю изменения перед RUN apt-get update, которые делают недействительным кэш изображений Docker.

Есть ли способ быть более избирательным с apt-get update, поэтому он достаточно обновляется, чтобы индексировать, куда можно загрузить curl? Или какой-то другой метод, который я могу использовать для ускорения сборки Docker?

Вот весь Dockerfile,

FROM postgres:9.6.10
ADD data/tsvs.tar.gz /standard_data
COPY postgres/*.sql /docker-entrypoint-initdb.d/

RUN apt-get update
RUN apt-get install curl ca-certificates -y
RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get install postgis postgresql-9.6-postgis-scripts -y

В настоящее время я делаю изменения в файлах SQL в postgres / *. Sql, отсюда и недействительность кэша.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Изображение организовано в слоях, и каждый слой зависит от предыдущего позже.Слои также кэшируются для скорости.

При повторном запуске сборки сохраняйте проверки, изменилась ли ch ckecksum командной строки в файле docker.Если этого не произошло, он извлекает слой из кэша.Но если это так, то он перестраивает более поздние и все последующие слои.

В вашем конкретном случае команда ADD генерирует новый слой каждый раз, когда вы вносите изменение, и это запускает все последующие слои для перестройки.

Перемещая установку, прежде чем решить эту проблему.

Вы также должны поместить все установки в одну строку и очистить кэш apt, когда закончите.

RUN apt-get install curl ca-certificates -y && \
  curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
  apt-get install postgis postgresql-9.6-postgis-scripts -y && \
  rm -rf /var/cache/apt && \
  apt-get clean
0 голосов
/ 15 мая 2019

Если я перемещу установочный материал curl до тех частей, которые я изменяю, кэш будет чаще попадать.Мой новый файл

FROM postgres:9.6.10
RUN apt-get update
RUN apt-get install curl ca-certificates -y
RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get install postgis postgresql-9.6-postgis-scripts -y

ADD data/tsvs.tar.gz /standard_data
COPY postgres/*.sql /docker-entrypoint-initdb.d/
COPY postgres/subsetting.s* /docker-entrypoint-initdb.d/

ч / т Калебу Х. за то, что он подумал об этом со своим комментарием.

...