Реєстр образів (registry) - сервер, що зберігає образи й віддає їх за назвою й тегом. docker push завантажує образ у реєстр, docker pull - отримує.
docker push ghcr.io/acme/app:1.4.2
docker pull ghcr.io/acme/app:1.4.2
Повна назва образу містить реєстр: ghcr.io/acme/app. Без нього Docker звертається до Docker Hub (docker.io): php:8.5-fpm - це docker.io/library/php:8.5-fpm.
Популярні реєстри:
- Docker Hub - найбільший публічний, офіційні образи (
php,nginx,postgres); - GitHub Container Registry (
ghcr.io) - зручно разом з GitHub Actions, права доступу як у репозиторію; - хмарні: AWS ECR, Google Artifact Registry, Azure Container Registry - близько до серверів, з IAM-доступом;
- власні: Harbor, GitLab Registry, простий
registry:2.
Ліміти Docker Hub (за сторінкою документації «Usage and limits»):
| Користувач | Ліміт завантажень |
|---|---|
| без входу | 100 за 6 годин на IPv4-адресу (чи IPv6-підмережу /64) |
| Personal (з входом) | 200 за 6 годин |
| Pro, Team, Business | без ліміту (з урахуванням fair use) |
Чому це стосується продакшену й CI:
- CI без автентифікації ділить ліміт з усіма користувачами тієї самої IP-адреси (спільні раннери) - збирання раптом падають з помилкою ліміту;
- кластер з багатьма вузлами, що одночасно завантажують базові образи, теж швидко вичерпує ліміт однієї публічної IP.
Що робити:
docker loginу CI й на серверах - навіть безкоштовний обліковий запис подвоює ліміт;- власний реєстр для своїх образів (GHCR, ECR) і дзеркало/кеш для базових образів (pull-through cache);
- не завантажувати зайве: кеш шарів на раннерах, однакові базові образи.
Безпека: приватні образи містять код застосунку - доступ до реєстру з окремими токенами лише на читання для серверів і на запис лише для CI.
Докладніше в документації: Docker Hub: використання й ліміти