Docker в Actions
Тема дорожной карты · GitHub Actions
Docker является первоклассным гражданином в GitHub Actions: workflow могут собирать, тегировать, публиковать и деплоить образы контейнеров в рамках полноценного CI/CD-пайплайна без какой-либо дополнительной инфраструктуры плагинов. GitHub-hosted Linux runners поставляются с предустановленным Docker, поэтому шаг run: docker build -t myapp:${{ github.sha }} . работает сразу после actions/checkout@v4, а собранный образ можно загрузить в Docker Hub, GitHub Container Registry (ghcr.io) или любой приватный реестр, передав учётные данные через ${{ secrets.REGISTRY_TOKEN }}. Для более удобных контейнерных workflow community-actions docker/build-push-action и docker/login-action абстрагируют команды docker build, docker tag и docker push в компонуемые шаги пайплайна со встроенным кешированием слоёв и мультиплатформенной поддержкой. Matrix-сборки GitHub Actions могут распараллеливать создание Docker-образов для нескольких базовых образов, версий ОС или архитектур, резко ускоряя мультиплатформенные пайплайны непрерывной интеграции. Интеграция Docker в GitHub Actions — базовый паттерн для команд, практикующих контейнерную автоматизацию workflow: от сборки образов для разработки до публикации production-артефактов при каждом слиянии в основную ветку.
Как это работает
Docker в Actions: 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 в Actions: push образов на каждый PR (засорённый registry — push только с main); базовые Docker-образы не запиннены по digest (сегодняшний node:22-alpine ≠ завтрашний); docker login напрямую с PAT вместо docker/login-action (теряет ergonomic-улучшения); долгие multi-arch сборки без buildx-кеша (10× медленнее).