Ускоряем сборку Docker-образов с кэшированием APT

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockerapt-cacher-ngapt

ℹ️ Сборка Docker-образов может занимать много времени из-за скачивания пакетов через APT. Даже если в пакеты не вносятся изменения, они каждый раз загружаются заново. Но это можно оптимизировать с помощью локального кэша для APT, что существенно ускорит сборку образов и снизит нагрузку на сеть.

⚡️1. Используем apt-cacher-ng для кэширования пакетов:

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

📑 2. Настройка Dockerfile:

Для того чтобы ваш контейнер использовал этот кэш, в Dockerfile нужно указать прокси-сервер для APT.

FROM ubuntu:20.04

# Установка apt-cacher-ng
RUN apt-get update && \
    apt-get install -y apt-cacher-ng

# Настраиваем APT на использование кэша
RUN echo 'Acquire::http::Proxy "http://172.17.0.1:3142";' > /etc/apt/apt.conf.d/01proxy

# Пример установки пакетов через кэш
RUN apt-get update && \
    apt-get install -y curl git vim

❗️ Обратите внимание на IP-адрес 172.17.0.1. Это адрес хоста в сети Docker, к которому контейнеры имеют доступ. Вы можете настроить его в зависимости от вашей сети.

🐳 3. Запуск контейнера с apt-cacher-ng:

docker run -d --name apt-cache -p 3142:3142 -v apt-cache:/var/cache/apt-cacher-ng ubuntu:20.04 \
    /usr/sbin/apt-cacher-ng

ℹ️ Как это ускоряет сборку?

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

✳️ Почему это полезно?

  • - Экономия времени: повторные сборки используют локальные копии пакетов, что ускоряет процесс.
  • - Оптимизация сети: меньше запросов к публичным репозиториям, что снижает нагрузку на сеть.
  • - Легко интегрируется: этот метод можно использовать как в локальных сборках, так и в CI/CD пайплайнах, чтобы ускорить деплой.

tags: #полезно #docker

🧭 @recura_tech

Скриншот терминала с фрагментом Dockerfile: установка apt-cacher-ng, настройка прокси (Acquire::http::Proxy 172.17.0.1:3142) и пример apt-get install.
Фрагмент Dockerfile с настройкой apt-cacher-ng и прокси для APT.

Читайте так же