← Docker: продвинутое
11 мин · просто · Урок 1 из 3

Реестры образов и теги

Где живут Docker-образы: registry, push/pull, теги и digest, приватные реестры и логин.

Где хранятся образы

Собранный образ нужно где-то держать, чтобы другие машины и CI могли его скачать. Хранилище образов называется registry (реестр). Docker Hub — публичный реестр по умолчанию. У облаков и GitLab есть свои, в том числе приватные.

docker pull nginx без указания реестра по факту тянет docker.io/library/nginx с Docker Hub. Полное имя образа включает реестр:

registry.gitlab.com/team/app:1.4.2
└── реестр ──────┘└─ имя ──┘└ тег ┘

push и pull

Загрузить свой образ в реестр и скачать обратно:

docker build -t registry.gitlab.com/team/app:1.4.2 .
docker push registry.gitlab.com/team/app:1.4.2     # загрузить
docker pull registry.gitlab.com/team/app:1.4.2     # скачать

Имя при сборке (-t) должно включать адрес реестра, иначе push не поймёт, куда грузить. Реестр хранит образ по слоям: общие слои между версиями не дублируются, поэтому повторный push заливает только то, что изменилось.

Тег и digest

Тег (:1.4.2, :latest) — это подвижная метка. Сегодня app:latest указывает на один образ, завтра после нового push — на другой. Для прода это плохо: непонятно, что именно выкачено.

Digest (@sha256:...) — неизменяемый хеш содержимого образа. Один и тот же digest — это всегда ровно тот же образ, побайтово:

docker pull app@sha256:abc123...   # навсегда один и тот же образ

Правило: для воспроизводимого прод-деплоя пинят digest или хотя бы конкретный тег версии (:1.4.2), а не :latest.

Приватные реестры и логин

Приватный реестр требует аутентификации перед push/pull:

docker login registry.gitlab.com
Username: ...
Password: ...

docker login сохраняет токен, дальше push/pull работают. В CI логинятся встроенными переменными (CI_REGISTRY_USER/CI_REGISTRY_PASSWORD в GitLab), а не зашитыми в конфиг паролями.

Старые ненужные образы в реестре накапливаются и едят место. Поэтому настраивают политику очистки: удалять образы старше N дней или оставлять последние N тегов.

Что важно запомнить

Registry — хранилище образов; полное имя включает адрес реестра, иначе по умолчанию это Docker Hub. push грузит, pull скачивает, общие слои не дублируются.

Тег подвижен, digest (@sha256:) неизменен. Для прода пинят конкретный тег или digest, не :latest.

Приватный реестр требует docker login; в CI логинятся встроенными переменными. Старые образы чистят по политике, чтобы не забить место.

В связке с CI/CD: пайплайн собирает образ, пушит в реестр, а деплой тянет его оттуда по конкретному тегу.

Прошли материал до конца? Отметьте урок пройденным.