#!/bin/bash # Script de build Docker pour PMOMusic # Usage: ./docker-build.sh [OPTIONS] set -e # Couleurs pour l'affichage GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # Configuration par défaut IMAGE_NAME="pmomusic" TAG="latest" NO_CACHE=false PUSH=true REGISTRY="niepce.petite-maison-orange.fr/public" # Fonction d'aide show_help() { echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " -t, --tag TAG Tag de l'image (défaut: latest)" echo " -r, --registry URL Registry Docker (ex: ghcr.io/user)" echo " -n, --no-cache Build sans cache" echo " -p, --push Push l'image vers le registry" echo " -h, --help Affiche cette aide" echo "" echo "Exemples:" echo " $0 # Build local avec tag 'latest'" echo " $0 -t v1.0.0 # Build avec tag 'v1.0.0'" echo " $0 -t v1.0.0 -r ghcr.io/user -p # Build et push vers GHCR" echo " $0 -n # Build sans cache" exit 0 } # Parsing des arguments while [[ $# -gt 0 ]]; do case $1 in -t|--tag) TAG="$2" shift 2 ;; -r|--registry) REGISTRY="$2" shift 2 ;; -n|--no-cache) NO_CACHE=true shift ;; -p|--push) PUSH=true shift ;; -h|--help) show_help ;; *) echo -e "${RED}Erreur: Option inconnue '$1'${NC}" show_help ;; esac done # Construire le nom complet de l'image if [ -n "$REGISTRY" ]; then FULL_IMAGE_NAME="$REGISTRY/$IMAGE_NAME:$TAG" else FULL_IMAGE_NAME="$IMAGE_NAME:$TAG" fi # Afficher la configuration echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}Build Docker PMOMusic${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo "Image: $FULL_IMAGE_NAME" echo "No cache: $NO_CACHE" echo "Push: $PUSH" echo "" # Construire la commande Docker DOCKER_CMD="docker build" if [ "$NO_CACHE" = true ]; then DOCKER_CMD="$DOCKER_CMD --no-cache" fi DOCKER_CMD="$DOCKER_CMD --build-arg BUILD_DATE=\"$(date -u +'%Y-%m-%dT%H:%M:%SZ')\" -t $FULL_IMAGE_NAME ." # Exécuter le build echo -e "${YELLOW}→ Démarrage du build...${NC}" echo "Commande: $DOCKER_CMD" echo "" if eval "$DOCKER_CMD"; then echo "" echo -e "${GREEN}✓ Build réussi !${NC}" # Afficher la taille de l'image IMAGE_SIZE=$(docker images "$FULL_IMAGE_NAME" --format "{{.Size}}") echo "Taille de l'image: $IMAGE_SIZE" # Push si demandé if [ "$PUSH" = true ]; then echo "" echo -e "${YELLOW}→ Push de l'image vers le registry...${NC}" if docker push "$FULL_IMAGE_NAME"; then echo -e "${GREEN}✓ Image pushée avec succès !${NC}" else echo -e "${RED}✗ Erreur lors du push${NC}" exit 1 fi fi echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}Build terminé avec succès !${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo "Pour lancer le conteneur:" echo " docker run -it --rm --network host $FULL_IMAGE_NAME" echo "" echo "Ou avec docker-compose:" echo " docker-compose up -d" else echo "" echo -e "${RED}✗ Erreur lors du build${NC}" exit 1 fi