github-actions)DOCKERHUB_USERNAME : votre username Docker HubDOCKERHUB_TOKEN : le token d’accès créé.github/workflows/docker-build.yml)name: Build et Push Docker Image
on:
push:
branches: [ "main" ]
tags:
- 'v*'
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: $/mon-image
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern=
type=semver,pattern=.
type=raw,value=latest,enable=
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: $
labels: $
cache-from: type=registry,ref=$/mon-image:buildcache
cache-to: type=registry,ref=$/mon-image:buildcache,mode=max
name: Build Multiple Docker Images
on:
push:
branches: [ "main" ]
workflow_dispatch:
jobs:
build-superminou:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Build and push SuperMinou
uses: docker/build-push-action@v5
with:
context: ./superminou
file: ./superminou/Dockerfile
push: true
tags: |
$/superminou:latest
$/superminou:$
build-autre-app:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Build and push Autre App
uses: docker/build-push-action@v5
with:
context: ./autre-app
file: ./autre-app/Dockerfile
push: true
tags: $/autre-app:latest
name: Build, Test et Push Docker Image
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
IMAGE_NAME: $/mon-app
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build image pour test
uses: docker/build-push-action@v5
with:
context: .
load: true
tags: $:test
- name: Test de l'image
run: |
docker run --rm $:test echo "Test réussi"
# Ajoutez d'autres tests ici
- name: Scan de sécurité avec Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: $:test
format: 'table'
exit-code: '1'
ignore-unfixed: true
severity: 'CRITICAL,HIGH'
build-and-push:
needs: test
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
steps:
- name: Checkout
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: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: $
tags: |
type=ref,event=branch
type=sha,prefix=-
type=raw,value=latest,enable=
- name: Build and push multi-platform
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: $
labels: $
cache-from: type=gha
cache-to: type=gha,mode=max
name: Release Docker Image
on:
push:
tags:
- 'v*.*.*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Extract version from tag
id: version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Build and push avec version
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
$/mon-app:$
$/mon-app:latest
- name: Update Docker Hub description
uses: peter-evans/dockerhub-description@v4
with:
username: $
password: $
repository: $/mon-app
readme-filepath: ./README.md
name: Build avec Arguments
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Build and push avec arguments
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: $/mon-app:latest
build-args: |
VERSION=$
BUILD_DATE=$
ENVIRONMENT=production
mon-projet/
├── .github/
│ └── workflows/
│ └── docker-build.yml
├── app1/
│ ├── Dockerfile
│ └── src/
├── app2/
│ ├── Dockerfile
│ └── src/
├── .dockerignore
└── README.md
.git
.github
.gitignore
README.md
.dockerignore
.env
.vscode
node_modules
*.log
.DS_Store
Une fois l’image publiée, vous pouvez la télécharger :
# Pull l'image
docker pull votre-username/mon-app:latest
# Ou avec une version spécifique
docker pull votre-username/mon-app:v1.2.3
# Exécuter l'image
docker run -p 8080:80 votre-username/mon-app:latest
name: Build SuperMinou
on:
push:
branches: [ "main" ]
paths:
- 'superminou/**'
- '.github/workflows/superminou.yml'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: $
password: $
- name: Build and push SuperMinou
uses: docker/build-push-action@v5
with:
context: ./superminou
file: ./superminou/Dockerfile
push: true
tags: |
$/superminou:latest
$/superminou:semaine08-labo2
build-args: |
PHP_VERSION=8.0.3
# Vérifiez que les secrets sont bien configurés
# Settings → Secrets → Actions
# Utilisez des images Alpine
FROM php:8.0-apache-alpine
# Multi-stage builds
FROM node:18 AS builder
# ... build steps
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
# Utilisez GitHub Actions cache
cache-from: type=gha
cache-to: type=gha,mode=max
# Tester localement le workflow
act push -s DOCKERHUB_USERNAME=xxx -s DOCKERHUB_TOKEN=xxx
# Voir les logs GitHub Actions
# Allez dans l'onglet "Actions" de votre repo
# Lister vos images sur Docker Hub
docker search votre-username