Реестры образов и теги
Где живут 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: пайплайн собирает образ, пушит в реестр, а деплой тянет его оттуда по конкретному тегу.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс