30-ого мая 2024 года мы внезапно узнали, что Docker Hub может внезапно превратиться в тыкву. Почему? А потому что санкции. Никогда такого не было и вот опять. Самое любопытное, что уже 3 июня 2024 года Docker Hub снова стал доступен, хотя вроде как никто ничего и не отменял. Тем не менее, доверять сервису уже не особо приходится и стоит быть готовым к подобным ситуациям в будущем.
Маршрутизация на роутере
Увы, но Docker Hub не первый и явно не последний и потому имеет смысл настроить маршрутизацию в туннель по доменам на роутере. Это очень удобно, ведь достаточно настроить роутер, а на сами устройства не потребуется установки ничего дополнительного на сами девайсы.
- Статья про Mikrotik
- Статья про Keenetic
- Одна из статей про OpenWrt. Здесь используется общий список доменов, который обновляется и прилетает в автоматическом режиме на роутеры. Ресурсы Docker были добавлены практически сразу.
Впрочем, у меня самого руки пока не дошли до настройки роутера, так что не могу ничего гарантировать.
Публичные зеркала Docker Hub
Это зеркала репозитория — они дают доступ к тем же образам и контейнерам. Вот несколько заграничных вариантов:
- https://mirror.gcr.io — зеркало от Google
- https://quay.io — зеркало Quay.io (redhat)
- https://public.ecr.aws — зеркало Amazon Elastic Container Registry
- https://ghcr.io — зеркало GitHub Container Registry
Но поскольку наши нетрадиционные партнёры по опасному политическому процессу могут и тут перекрыть кислород, то имеет смысл нацелится на отечественные зеркала:
- https://registry.gitverse.ru — российская разработка
- https://dockerhub.timeweb.cloud/ — зеркало от TimeWeb
- https://dockerhub1.beget.com — Beget
- https://cr.yandex/mirror — Яндекс
Для того чтобы настроить Docker Desktop, нужно зайти в настройки и выбирать Docker Engine. В открывшемся редакторе прописываем строки с зеркалами:
"registry-mirrors": [
"https://cr.yandex/mirror",
"https://dockerhub.timeweb.cloud",
"https://dockerhub1.beget.com",
"https://registry.gitverse.ru"
]
После применяем Apply & Restart.
Для Linux потребуется сделать примерно тоже самое — открываем файл ~/.docker/config.json и добавляем те же самые строки. После выполняем команду и мы снова великолепны:
systemctl reload docker.service
Но следует помнить, что если мы захотим удалить зеркало, то нужно будет перезапустить сервис:
systemctl restart docker.service
Прокси
Зеркала позволят получить образ, но что делать, если вам нужно запушить или просмотреть образы? Здесь уже потребуется использовать прокси.
Для Docker Desktop всё просто — идём в настройки (Settings — Resources — Proxies) и в HTTP и в HTTPS вставляем одно и то же значение.
http://some-proxy-url.com:3128
С Linux несколько интересней, поскольку вместо того чтобы править ~/.docker/daemon.json (т.к. данные из daemon.json используются при сборке и в уже запущенных контейнерах), нужно выполнить следующее:
- Создать каталог /etc/systemd/system/docker.service.d
sudo mkdir -p /etc/systemd/system/docker.service.d
- Создать в нём файл http-proxy.conf
- И вставить в него следующие строки:
[Service]
Environment="HTTP_PROXY=http://some-proxy-url.com:3128"
Environment="HTTPS_PROXY=http://some-proxy-url.com:3128"
- После чего заставляем systemd найти новый сервис и перезапускаем docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Проверяем результат — мы должны увидеть Environments:
sudo systemctl show --property=Environment docker
В результате мы должны увидеть что-то вроде такого:
Environment=HTTP_PROXY=http://some-proxy-url.com:3128 HTTPS_PROXY=http://some-proxy-url.com:3128
Теперь docker pull будет работать через прокси.
Заключение
Блокировка такого крупного ресурса это очень неприятно, но в такое вот время мы живём. Радует лишь то, что выход есть всегда и современные технологии творят чудеса.