Больше не ждем! Как public-image-mirror ускоряет загрузку Docker-образов и Kubernetes-компонентов
Знакомая ситуация? Вы запускаете docker pull или разворачиваете очередной кластер Kubernetes, а образы тянутся так медленно, что можно успеть выпить кофе, а то и два. Особенно, если речь идет о зарубежных репозиториях вроде GCR или Quay.io. В такие моменты хочется найти волшебную палочку, которая ускорит процесс. И, знаете, я кажется, ее нашел! Сегодня мы поговорим о проекте public-image-mirror от DaoCloud, который может стать вашим личным ускорителем для контейнерных образов.
Что это за зверь и зачем он нужен?
public-image-mirror — это не просто очередной прокси, а полноценный публичный сервис зеркалирования популярных репозиториев контейнерных образов. Его главная цель — решить проблему медленной загрузки образов из-за географической удаленности или сетевых ограничений. Проще говоря, если ваши Docker-образы или компоненты Kubernetes "зависают" при загрузке, этот проект предлагает элегантное и эффективное решение.
Представьте, что вы пытаетесь скачать огромный файл из-за океана. Скорость будет не ахти. А теперь представьте, что этот файл уже лежит на ближайшем к вам сервере. Разница очевидна, верно? public-image-mirror работает по схожему принципу, предоставляя локальные кэшированные копии образов, что значительно сокращает время ожидания.
Как это работает под капотом?
Суть работы public-image-mirror довольно проста и изящна: он выступает в роли зеркала для множества внешних репозиториев. Когда вы запрашиваете образ через этот сервис, он сначала проверяет, есть ли у него уже кэшированная копия. Если есть — вы получаете ее на максимальной скорости. Если нет — сервис "лениво" подтягивает образ из оригинального источника, кэширует его и отдает вам. При этом все хеши (SHA256) остаются идентичными оригинальным, что гарантирует целостность и безопасность образов.
Ключевые особенности, которые делают его таким привлекательным:
- Широкая поддержка репозиториев: Проект поддерживает зеркалирование образов из Docker Hub (
docker.io), Google Container Registry (gcr.io), GitHub Container Registry (ghcr.io), Kubernetes Registry (registry.k8s.io), Microsoft Container Registry (mcr.microsoft.com), Quay.io и многих других. Это покрывает львиную долю потребностей большинства разработчиков. - Простота использования: Вам не нужно разворачивать свой прокси или сложную инфраструктуру. Достаточно добавить специальный префикс к имени образа или настроить зеркало в конфигурации Docker/Containerd.
- Актуальность и надежность: Сервис регулярно проверяет и синхронизирует образы с оригинальными источниками. Кэшированные данные хранятся до 90 дней, а манифесты обновляются каждый час, что обеспечивает достаточно высокую актуальность.
- Открытый исходный код бэкенда: Кстати, сам бэкенд сервиса,
ocimirror, тоже открыт, что добавляет прозрачности и доверия к проекту.
Практика: Ускоряем всё, что движется!
Самое интересное — это, конечно, как применить этот инструмент в реальной жизни. И здесь public-image-mirror предлагает несколько очень удобных способов.
Ускоряем Docker-образы
Это, пожалуй, самый частый сценарий. Вместо того чтобы тянуть образ напрямую с docker.io, вы просто добавляете префикс m.daocloud.io/ к имени образа.
Например, вместо:
docker run -d -P docker.io/library/nginx
Вы пишете:
docker run -d -P m.daocloud.io/docker.io/library/nginx
Или, что еще удобнее, можно настроить Docker-демон на использование зеркала по умолчанию. Для этого достаточно добавить несколько строк в файл /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
После этого перезапустите Docker-демон, и все ваши docker pull будут автоматически использовать ускоренное зеркало. Красота!
Ускоряем Kubernetes-компоненты
Для тех, кто работает с Kubernetes, public-image-mirror — это просто находка. Медленная загрузка образов для подов или системных компонентов может сильно замедлить развертывание и отладку.
-
При установке
kubeadm: Вы можете указать зеркало прямо в конфигурацииClusterConfiguration:apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration dns: imageRepository: k8s.m.daocloud.io/coredns imageRepository: k8s.m.daocloud.io # ... -
При создании кластера
kind: Аналогично, можно указать образ узла с префиксом зеркала:kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1 -
Автоматическое ускорение всех подов с
repimage: Это вообще магия! Проектrepimage(который, кстати, тоже упоминается в README) использует Webhook, чтобы автоматически переписывать пути к образам во всех новых подах, заставляя их использоватьpublic-image-mirror. Устанавливается это одной командой:kubectl create -f https://files.m.daocloud.io/github.com/wzshiming/repimage/releases/download/latest/repimage.yaml kubectl rollout status deployment/repimage -n kube-systemИ вуаля! Все ваши поды будут стартовать быстрее без единого изменения в ваших YAML-файлах.
-
Конфигурация
Containerd: Если вы используетеContainerdв качестве среды выполнения контейнеров, можно настроить зеркала через его конфигурацию, что особенно актуально для кластеров Kubernetes.
Ускоряем Ollama и DeepSeek (экспериментально)
Интересно, что проект не ограничивается только "классическими" контейнерами. В README упоминается экспериментальная поддержка ускорения для Ollama — инструмента для запуска больших языковых моделей локально. Это может быть очень полезно для разработчиков, экспериментирующих с LLM.
Например, для запуска Ollama с ускорением:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama docker.m.daocloud.io/ollama/ollama
И даже для ускорения загрузки моделей, таких как DeepSeek-R1, если вы запускаете их через Ollama:
docker exec -it ollama ollama run ollama.m.daocloud.io/library/deepseek-r1:1.5b
Это показывает, что проект активно развивается и адаптируется под новые тренды в IT.
Немного о "друзьях" проекта
Кстати, у public-image-mirror есть "брат-близнец" — public-binary-files-mirror, который занимается ускорением загрузки бинарных файлов. Если вы часто сталкиваетесь с медленной загрузкой исполняемых файлов из GitHub Releases или других источников, обязательно загляните и туда. Вместе они образуют отличный дуэт для ускорения вашей разработки.
Стоит ли попробовать? Мой вердикт
Однозначно да! Если вы хоть раз сталкивались с проблемой медленной загрузки контейнерных образов, public-image-mirror — это то, что вам нужно. Это бесплатный, простой в использовании и очень эффективный инструмент, который сэкономит вам часы ожидания и нервов.
Он идеально подойдет:
- Разработчикам, работающим с Docker и Kubernetes.
- DevOps-инженерам, отвечающим за развертывание и эксплуатацию.
- Всем, кто находится в регионах с неоптимальным доступом к международным репозиториям.
Проект активно поддерживается, имеет открытый исходный код и уже зарекомендовал себя как надежное решение. Так что, не откладывайте, попробуйте public-image-mirror в деле и почувствуйте разницу! Ваше время — ваш самый ценный ресурс, и этот проект поможет его сохранить.
