Модуль 8 / 24
Registry та immutable images
Зміст
1. Цілі та результат модуля
Після модуля ви зможете пояснити роль registry, публікувати версії образу, фіксувати deployment за digest і діагностувати image pull.
- розрізняти tag і digest
- перевіряти довіру TLS registry
- підтверджувати однаковий image на всіх nodes
- читати Rejected task за відсутнього manifest
2. Теорія: registry і distribution
Registry зберігає content-addressed layers і manifests. Push завантажує відсутні blobs і пов’язує manifest із tag. Кожен node самостійно отримує image перед запуском task, тому registry та його CA мають бути доступні всім nodes.
Production registry потребує TLS, автентифікації, контролю доступу, резервного копіювання й очищення. Навчальний registry доступний лише в мережі 10.77.0.0/24 і використовує тимчасовий сертифікат.
4. Теорія: розв’язання образу
Manager намагається розв’язати tag до digest під час створення service. Якщо registry недоступний, nodes можуть розв’язувати tag незалежно, про що Docker попереджає. Явний digest усуває неоднозначність, але не замінює доступність registry.
5. Методичні вказівки
- Не публікуйте credentials у manifest або shell history
- Перевіряйте SAN сертифіката й CA на кожному node
- Використовуйте окремі repositories та незмінні version tags
- Записуйте digest із результату push
- Розгортайте production service за digest
- Помилку pull відтворюйте окремим service
6. Лабораторна робота: registry і дві версії
Інструктор заздалегідь запускає тимчасовий TLS registry на 10.77.0.11:5000, встановлює CA на три nodes, збирає та публікує v1 і v2. Перевірте API і два різні RepoDigests. Під час повторного build використовуйте нові digests із push.
ssh swarm-manager-1 curl --fail --silent --show-error --cacert /etc/docker/certs.d/10.77.0.11:5000/ca.crt https://10.77.0.11:5000/v2/
ssh swarm-manager-1 docker image inspect 10.77.0.11:5000/swarm-m08/web:v1 --format '{{index .RepoDigests 0}}'
ssh swarm-manager-1 docker image inspect 10.77.0.11:5000/swarm-m08/web:v2 --format '{{index .RepoDigests 0}}'7. Лабораторна робота: deployment v1 за digest
Створіть три replicas за точним digest v1. service ps має показати Running task на кожному node, а inspect — незмінне посилання.
ssh swarm-manager-2 docker service create --detach=true --name swarm-m08-web --replicas 3 10.77.0.11:5000/swarm-m08/web@sha256:50b6bd7de1feea427f59c5499869be57a3e288728b0e6c770acd8005bf2ca5d0
ssh swarm-manager-2 docker service ps swarm-m08-web --no-trunc
ssh swarm-manager-2 docker service inspect swarm-m08-web --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'8. Лабораторна робота: immutable update
Оновіть spec на digest v2 і дочекайтеся convergence. Історія tasks має пов’язати старий і новий digest без залежності від tag.
ssh swarm-manager-2 docker service update --detach=false --image 10.77.0.11:5000/swarm-m08/web@sha256:610682351bdcbeca24ec8de18b705505ec4baafbd401b39438c9e6b3b1d76256 swarm-m08-web
ssh swarm-manager-2 docker service inspect swarm-m08-web --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'
ssh swarm-manager-2 docker service ps swarm-m08-web9. Діагностика image pull
Створіть окремий service з відсутнім tag. Очікується Rejected із manifest not found. TLS unknown authority, timeout і denied означають інші рівні проблеми.
ssh swarm-manager-2 docker service create --detach=true --name swarm-m08-missing --replicas 1 10.77.0.11:5000/swarm-m08/web:missing
ssh swarm-manager-2 docker service ps swarm-m08-missing --no-truncssh swarm-manager-2 docker service ps swarm-m08-web --no-trunc
ssh swarm-manager-1 docker pull 10.77.0.11:5000/swarm-m08/web:v2
ssh swarm-manager-1 journalctl -u docker --since today- x509 — неправильна CA, SAN або строк
- connection refused — registry недоступний
- denied — помилка auth/authorization
- not found — repository, tag або digest відсутній
10. Контроль, критерії засвоєння та cleanup
- Чому tag вважають mutable?
- Що ідентифікує digest?
- Коли manager не може закріпити tag?
- Чому registry потрібен кожному node?
- Чим not found відрізняється від x509?
- Що потрібно production registry понад цю лабораторію?
Модуль засвоєно, якщо ви публікуєте різні manifests, розгортаєте й оновлюєте за digest та точно класифікуєте pull failure.
Видаліть сервіси. Інструктор також видаляє тимчасовий registry, дані, CA, ключ і локальні образи.
ssh swarm-manager-2 docker service rm swarm-m08-web swarm-m08-missing
ssh swarm-manager-2 docker service ls
ssh swarm-manager-2 docker node ls