сборка докера с использованием предыдущих кешей сборки из реестра

Я настраиваю план сборки бамбука для создания образов докеров. Использование AWS ECS в качестве реестра. План сборки примерно такой;

  • вытащить последний тег

    docker pull xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • создать образ с последним тегом

    docker build -t myimage:latest .
    
  • пометить изображение (необходимо для ECS)

    docker tag -f myimage:latest xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    
  • Вставьте образ в реестр

    docker push xx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest
    

Поскольку задачи сборки каждый раз запускаются на разных и новых механизмах/серверах сборки, у него нет локального кеша.

Когда я ничего не меняю в Dockerfile и выполняю его снова (на другом сервере), я ожидаю, что докер будет использовать локальный кеш (исходит из вытягивания докера) и не будет выполнять каждую строку снова. Но он каждый раз пытается построить имидж. Я также ожидал, что когда я что-то изменю в нижней части файла, он будет использовать кеш и выполнит только последнюю строку, но я не уверен в этом.

Я что-то не так знаю или есть мнения по подходу?


person code_ada    schedule 07.12.2017    source источник
comment
Можете ли вы поделиться выводом о том, как выглядит каждый раз попытка построить изображение? Вы по-прежнему будете видеть, что каждый слой построен, но он скажет, что использует кеш.   -  person danehammer    schedule 07.12.2017
comment
08 декабря 2017 г. 08:38:16 Шаг 8: ЗАПУСК add-apt-repository ppa:maxmind/ppa -y 08 декабря 2017 г. 08:38:17 ---› Запуск в 5806bde2c3d3 08 декабря 2017 г. 08: 38:17 gpg: набор ключей /tmp/tmp5o6q7_ge/secring.gpg' created 08-Dec-2017 08:38:17 gpg: keyring /tmp/tmp5o6q7_ge/pubring.gpg' создан 08 декабря 2017 г. 08:38:17 gpg: запрос ключа DE742AFA с сервера hkp keyserver.ubuntu.com 08 декабря 2017 г. 08:38:17 gpg: /tmp/tmp5o6q7_ge/trustdb.gpg: trustdb создана 08 декабря 2017 г. 08:38:17 gpg: ключ DE742AFA: открытый ключ Launchpad PPA для MaxMind импортирован 08 декабря   -  person code_ada    schedule 08.12.2017
comment
просто пример. как я уже сказал, он не использует предыдущие слои.   -  person code_ada    schedule 08.12.2017
comment
Можешь попробовать docker build -t myimage:latest --cache-from xxx.dkr.ecr.eu-west-1.amazonaws.com/myimage:latest ., может поможет   -  person Tarun Lalwani    schedule 12.12.2017
comment
все тот же Step 2/37 : RUN apt-get update ---> Running in 75f813c63132 Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]   -  person code_ada    schedule 13.12.2017
comment
Эй, ты пробовал это? docker build -t myimage:latest . - - без кэша   -  person m0hit    schedule 13.12.2017
comment
Вы можете столкнуться с этим: github.com/moby/moby/issues/31613   -  person tne    schedule 17.12.2017


Ответы (1)


вы планируете использовать squid proxy?

изменить: если вы не хотите переходить на официальный сайт выше, вот быстрая настройка прокси-сервера squid (на основе Debian)

apt-get install squid-deb-proxy

а затем измените конфигурацию кальмара, чтобы создать большее пространство, открыв

/etc/squid/squid.conf

и замените #cache_dir ufs /var/spool/squid на cache_dir ufs /var/spool/ squid 10000 16 256 и вот, 10.000 МБ кэш-памяти

а затем укажите адрес прокси в dockerfile, вот пример dockerfile с прокси squid

дистрибутив на основе yum и apt-get:

дистрибутив на основе apt-get

`FROM debian
RUN apt-get update -y && apt-get install net-tools
RUN echo "Acquire::http::Proxy \"http://$( \
route -n | awk '/^0.0.0.0/ {print $2}' \
):8000\";" \ > /etc/apt/apt.conf.d/30proxy
RUN echo "Acquire::http::Proxy::ppa.launchpad.net DIRECT;" >> \
/etc/apt/apt.conf.d/30proxy
CMD ["/bin/bash"]`

дистрибутив на основе yum

`FROM centos:centos7
RUN yum update -y && yum install -y net-tools
RUN echo "proxy=http://$(route -n | \
awk '/^0.0.0.0/ {print $2}'):3128" >> /etc/yum.conf
RUN sed -i 's/^mirrorlist/#mirrorlist/' \
/etc/yum.repos.d/CentOS-Base.repo
RUN sed -i 's/^#baseurl/baseurl/' \
/etc/yum.repos.d/CentOS-Base.repo
RUN rm -f /etc/yum/pluginconf.d/fastestmirror.conf
RUN yum update -y
CMD ["/bin/bash"]`

скажем, вы устанавливаете прокси-сервер squid в свой реестр aws, только первая сборка будет получать данные из Интернета, сборка остальных (другого сервера) должна быть из кэшированного прокси-сервера squid. .

этот метод основан на методе 57 из книги докер на практике с заголовком настроить кэш пакетов для более быстрой сборки.

я не думаю, что в докере есть функция кеша без какого-либо стороннего программного обеспечения ... может быть, и я просто не знаю этого. Я не уверен, просто поправьте меня, если я ошибаюсь. .

person Fendi jatmiko    schedule 19.12.2017
comment
вопрос не в кэшировании подходящих пакетов, а в слоях изображений. - person code_ada; 21.12.2017
comment
Что ж. Это всего лишь мой небольшой пример, вы также можете использовать кеш кальмара на слоях изображений. . вот пример прокси-сервера кэширования docker - person Fendi jatmiko; 21.12.2017