Ответ
Система находит образ контейнера по его полному имени (FQDN), которое включает адрес реестра (registry), имя репозитория и тег или диджест. Механизм поиска зависит от контекста.
В Docker команда docker pull сначала проверяет локальный кеш. Если образа нет, Docker обращается к публичному Docker Hub (это registry по умолчанию) или к приватному registry, указанному в полном имени.
# Ищет в локальном кеше, затем качает с Docker Hub (registry-1.docker.io)
docker pull nginx:alpine
# Ищет и качает из приватного реестра GitLab
docker pull registry.gitlab.com/mygroup/myapp:latest
В Kubernetes путь к образу указывается в манифесте Pod или Deployment в поле spec.containers[].image. Kubelet на узле, используя Container Runtime Interface (CRI), выполняет аналогичную логику: проверяет локальный кеш и при необходимости обращается к удаленному registry.
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: app
image: nginx:1.25 # Скачается с Docker Hub
# image: myprivateregistry.local:5000/app:v2 # Скачается с кастомного registry
Ключевые нюансы:
- Аутентификация: Для приватных registry необходимо настроить секреты. В Kubernetes это
imagePullSecrets, в Docker — логин черезdocker login. - Теги vs Диджесты: Тег (
:latest) — это изменяемая метка. Диджест (nginx@sha256:a1b2c3...) — это криптографический хэш конкретного слоя образа, гарантирующий неизменность. - Локальные образы: Можно загрузить образ из tar-архива (
docker load -i image.tar) или собрать локально (docker build). В этом случае registry не используется.