#docker #dockerfile #docker-registry
#docker #dockerfile #docker-реестр
Вопрос:
В 2019 году я сделал pull-образ Python 3.6. После этого я был уверен, что изображение самообновляется (я не использовал его активно, я просто надеялся, что последние push-файлы сами были извлечены из репозитория или что-то в этом роде), но я был удивлен, когда случайно заметилдата загрузки / создания — 2019 год.
Вопрос: Как работает извлечение изображения? Существуют ли флаги, позволяющие проверять хэш слоя / его релевантность * при каждом создании изображения? Возможно, есть способ установить эту проверку через конфигурационный файл docker daemon? Или мне нужно каждый раз удалять базовое изображение, чтобы получить новое изображение?
Что я хочу: чтобы каждый раз, когда я создаю свои изображения, базовое изображение проверялось на наличие последнего нажатия (публикации изображения) в репозитории docker hub.
Примечание: я говорю об изображениях с идентичным тегом. Кроме того, я не боюсь перестраивать свои изображения, нет никакой цели их сохранять.
Спасибо.
Ответ №1:
Вам нужно явно docker pull
указать изображение, чтобы получать обновления. Для ваших пользовательских изображений есть docker build --pull
docker-compose build --pull
опции и, которые будут извлекать базовое изображение (хотя для них нет опции «вытягивать» docker-compose up --build
).
Без этого Docker никогда не будет проверять наличие обновлений для изображения, которое у него уже есть. Если ваш Dockerfile запускается FROM python:3.6
, и у вас уже есть локальный образ с этим именем и тегом, Docker просто использует его, не связываясь с Docker Hub. Если у вас его нет, Docker вытащит его один раз, а затем он будет у вас локально.
Еще одна вещь, на которую следует обратить внимание, это то, что обновления в конечном итоге прекращаются. Если вы посмотрите на страницу с изображением Docker Hub python
, вы заметите, что для Python 3.5 больше нет перестроек. Если вы привязываете к очень конкретной версии исправления, автоматические сборки обычно создают только последнюю версию исправления для каждой поддерживаемой младшей версии; если ваш образ является FROM python:3.6.11
, он никогда не получит обновлений, потому что 3.6.12 являетсяпоследняя версия 3.6.x.