GitHub Actions permet d’automatiser l’ensemble du cycle de vie des images Docker, de la construction au déploiement, directement depuis votre dépôt. En combinant les actions Docker officielles avec les fonctionnalités de GitHub Actions, vous créez des pipelines CI/CD robustes qui construisent des images multi-architecture, les publient sur des registres de conteneurs et analysent les vulnérabilités de sécurité. Ce guide détaille la mise en place d’un workflow complet de construction et déploiement Docker.
Création du Workflow de Base
Créez le fichier de workflow dans votre dépôt :
# .github/workflows/docker-build.yml
name: Build and Push Docker Image
on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
permissions:
contents: read
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=semver,pattern={{version}}
type=sha,prefix=
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
Ce workflow se déclenche sur les push vers main et les tags de version. Il utilise le cache GitHub Actions pour accélérer les builds suivants.
Authentification et Registres
Pour publier sur GHCR, le GITHUB_TOKEN suffit. Pour Docker Hub, configurez des secrets dans les paramètres de votre dépôt :
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
Générez un token d’accès Docker Hub dans les paramètres de votre compte Docker Hub plutôt que d’utiliser votre mot de passe directement.
Builds Multi-Architecture
Les actions setup-qemu-action et setup-buildx-action permettent de construire des images pour plusieurs architectures dans un seul workflow. Le paramètre platforms: linux/amd64,linux/arm64 génère des images compatibles avec les serveurs x86 et les appareils ARM comme les instances AWS Graviton ou les Raspberry Pi.
Le cache BuildKit (cache-from/cache-to: type=gha) stocke les couches intermédiaires dans le cache GitHub Actions, réduisant considérablement les temps de build pour les commits suivants.
Analyse de Vulnérabilités
Ajoutez une étape d’analyse de sécurité après la construction de l’image :
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: ghcr.io/${{ github.repository }}:${{ steps.meta.outputs.version }}
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Trivy scan results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
Trivy analyse les couches de l’image à la recherche de CVE connues. Les résultats sont téléchargés au format SARIF et apparaissent dans l’onglet Security de votre dépôt GitHub.
Résumé
Ce guide a couvert la création d’un pipeline CI/CD complet avec GitHub Actions pour la construction et le déploiement d’images Docker. Les éléments clés incluent l’authentification aux registres, les builds multi-architecture avec BuildKit, le cache des couches et l’analyse de vulnérabilités avec Trivy. Adaptez ce workflow à vos besoins en ajoutant des étapes de tests, de linting ou de déploiement sur des environnements cibles.