docker/build-push-action

Тема дорожной карты · GitHub Actions

docker/build-push-action — официальный action GitHub Actions для сборки и публикации Docker-образов в рамках CI/CD-пайплайна. Под капотом он использует Docker Buildx, предоставляя расширенные возможности: мультиплатформенные сборки, встроенное кеширование слоёв через параметры cache-from и cache-to, а также оптимизации на базе BuildKit, существенно сокращающие время сборки. Типичный шаг workflow задаёт push: true совместно со списком tags (например, со ссылкой на ${{ github.sha }} или тег semver) и context, указывающим на каталог с Dockerfile, превращая сборку и публикацию Docker-образа в один декларативный шаг вместо последовательности shell-команд. Action бесшовно интегрируется с docker/login-action для аутентификации в Docker Hub, GitHub Container Registry (ghcr.io) или любом приватном реестре до загрузки образа. Использование docker/build-push-action в workflow GitHub Actions — рекомендуемый подход для получения воспроизводимых, безопасно подписанных образов контейнеров в современном пайплайне.

Как это работает

docker/build-push-action: docker/build-push-action, docker/login-action, docker/setup-buildx-action — каноническое трио для build + push образа. Multi-arch через buildx + qemu (docker/setup-qemu-action). Build-кеш через cache-from: type=gha + cache-to: type=gha (использует GHA-cache backend — встроенная поддержка). Container-actions (ваш action работает внутри Docker-образа) и service containers (services: блок для sidecar БД, Redis при тестах).

Когда применять

buildx — для любого нетривиального Docker-образа: multi-arch + layer cache + cross-platform. Push в GHCR (ghcr.io) — бесплатный приватный storage, привязанный к репо. services: — для integration-тестов с Postgres/Redis/Kafka: стартуют до шагов. Multi-stage Dockerfile + buildx cache + GHA-cache backend даёт < 2 мин пересборки на cache hit.

Типичные ошибки

Ловушки docker/build-push-action: push образов на каждый PR (засорённый registry — push только с main); базовые Docker-образы не запиннены по digest (сегодняшний node:22-alpine ≠ завтрашний); docker login напрямую с PAT вместо docker/login-action (теряет ergonomic-улучшения); долгие multi-arch сборки без buildx-кеша (10× медленнее).

Связанные понятия

Полезные ресурсы