Ответ
Интеграция Docker в CI/CD позволяет создавать консистентные и изолированные окружения для сборки, тестирования и развертывания приложений. Это решает проблему «на моей машине работает».
Типичный процесс выглядит так:
- Сборка образа (
docker build): На основеDockerfileсоздается образ приложения со всеми зависимостями. - Тестирование: Запускается контейнер из созданного образа для выполнения тестов (unit, integration). Это гарантирует, что тесты проходят в том же окружении, которое будет развернуто.
- Публикация образа (
docker push): Если тесты успешны, образ загружается в реестр контейнеров (Docker Hub, GitLab Container Registry, AWS ECR). - Развертывание: Система развертывания (например, Kubernetes) скачивает новую версию образа из реестра и обновляет приложение.
Пример пайплайна в GitHub Actions:
name: Docker CI/CD
on:
push:
branches: [ "main" ]
jobs:
build_and_push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: your-username/your-app:latest
Для оптимизации размера и безопасности образов часто применяют multi-stage builds в Dockerfile.