Как проверить, устарело ли мое локальное изображение докеров, не нажав откуда-то еще?
Я запускаю приложение для реагирования в контейнере докеров, на сервере Coreos. Скажем, он был вытащен из докер-хаба из https://hub.docker.com/r/myimages/myapp
.
Теперь я хочу периодически проверять, обновлено ли изображение dockerhub для контейнера приложения, чтобы увидеть, позади ли изображение, которое я запускаю локально.
Каким будет наиболее эффективный способ проверить, устарело ли местное изображение докеров по сравнению с удаленным изображением? Все решения, которые я нашел до сих пор, - это bash скрипты или внешние службы, которые нажимают на обновление. Я хотел бы найти решение, которое является как можно более родным для докеров, и хотел бы воздержаться от нажатия уведомления из другого места (чтобы предупредить сервер об обновленном изображении).
Ответы
Ответ 1
Если вы используете Docker Hub, вы можете использовать Webhook, чтобы уведомить хост докера об обновлении и предпринять необходимые действия.
Использование webhook было бы "простым" способом сделать это (я думаю), в противном случае вам пришлось бы выполнять какое-то сканирование в доке, или, как объясняет @alebianco, сравнивая некоторые хэши или даты сборки/создания.
Вот документы об этом: https://docs.docker.com/docker-hub/webhooks/
Ответ 2
существует API, доступный для Docker Hub
Вы должны иметь возможность получить список тегов, а оттуда детали манифеста
изменить
Я немного искал, похоже, что они не раскрывают никакой контрольной суммы изображения, его манифеста или слоев, которые его составляют.
Самая близкая вещь, которую я нашел, - это дата создания... которую я бы не предлагал использовать, если вы пытаетесь сделать что-то удаленно.
В любом случае вам нужно сначала получить токен доступа
curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull"
извлеките токен из ответа, затем вы можете загрузить манифест версии изображения
curl --header "Authorization: Bearer $TOKEN" https://index.docker.io/v2/library/ubuntu/manifests/latest
Посмотрите на объект истории возвращаемого json, вы найдете созданное свойство.
Затем вы можете получить дату создания локального изображения с помощью
docker inspect --format "{{json .Created}}" ubuntu:latest
Сравните двух и съедайтесь...
Ответ 3
Я решил эту проблему с помощью искателя, который проверяет непосредственно файл Dockerfile или строку from
.
Я полностью поддержал изображение докеров, которое можно было найти в .
Я просто запускаю изображение в моем конвейере gitlab ci. Если базовое изображение устарело, он печатает все более новые версии, чтобы вы могли легко выбрать тег.
Ссылка: https://hub.docker.com/r/olafnorge/docker-image-crawler/