sqlserver_docker.sh
Note de lecture générée automatiquement
Le vrai fichier est
scripts/bdd/sqlserver_docker.sh(Obsidian n’affiche pas les scripts eux-mêmes). Ne modifie pas cette note : modifie le script, puis relancepython3 generer_vues_obsidian.pydans le dossierscripts.
- À quoi il sert : SQL Server en conteneur (créer/démarrer/état/sauvegarder)
- Lancer (dans le dossier
scripts/bdd/) :./sqlserver_docker.sh creer|demarrer|arreter|etat|sqlcmd|sauvegarder <base> - Fiche : B06 - SQL Server - installation et outils
- Retour : 00 - Tous les scripts
Code
#!/usr/bin/env bash
# =============================================================================
# sqlserver_docker.sh — Gérer un SQL Server en conteneur Docker (Pop!_OS / Arch)
#
# Usage : ./sqlserver_docker.sh creer → crée le conteneur (1re fois)
# ./sqlserver_docker.sh demarrer → démarre
# ./sqlserver_docker.sh arreter → arrête
# ./sqlserver_docker.sh etat → 🟢 / 🟡 / ⚪
# ./sqlserver_docker.sh sqlcmd → console SQL dans le conteneur
# ./sqlserver_docker.sh sauvegarder <base> → fichier .bak copié ici
#
# Variables modifiables : NOM_CONTENEUR, IMAGE, PORT
# Connexion depuis VS Code (extension SQL Server) : serveur localhost,1433 /
# utilisateur sa / mot de passe choisi / "Trust server certificate" coché.
# =============================================================================
set -euo pipefail
NOM_CONTENEUR="${NOM_CONTENEUR:-sqlserver}"
IMAGE="${IMAGE:-mcr.microsoft.com/mssql/server:2022-latest}" # ou :2025-latest
PORT="${PORT:-1433}"
VOLUME="${NOM_CONTENEUR}_donnees"
action="${1:-etat}"
sqlcmd_conteneur() {
# sqlcmd est livré dans l'image ; -C = faire confiance au certificat auto-signé
docker exec -it "$NOM_CONTENEUR" /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -C "$@"
}
case "$action" in
creer)
read -r -s -p "Mot de passe sa (8+ caractères, MAJ, min, chiffre, symbole) : " mot_de_passe_sa
echo
docker run -d --name "$NOM_CONTENEUR" --hostname "$NOM_CONTENEUR" \
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=$mot_de_passe_sa" -e "MSSQL_PID=Developer" \
-p "$PORT:1433" -v "$VOLUME:/var/opt/mssql" \
"$IMAGE"
echo "Démarrage (20-30 s)…"
for _ in $(seq 1 30); do
if docker logs "$NOM_CONTENEUR" 2>&1 | grep -q "ready for client connections"; then
echo "🟢 SQL Server prêt sur localhost,$PORT"
exit 0
fi
sleep 2
done
echo "⚠ Pas encore prêt. Regarde : docker logs $NOM_CONTENEUR | tail -30"
;;
demarrer) docker start "$NOM_CONTENEUR" && echo "🟢 démarré" ;;
arreter) docker stop "$NOM_CONTENEUR" && echo "⚪ arrêté" ;;
etat)
statut=$(docker inspect -f '{{.State.Status}}' "$NOM_CONTENEUR" 2>/dev/null || echo "absent")
case "$statut" in
running) echo "🟢 SQL Server en marche (port $PORT)" ;;
created|restarting) echo "🟡 SQL Server en cours de démarrage" ;;
absent) echo "⚪ Aucun conteneur '$NOM_CONTENEUR' : lance '$0 creer'" ;;
*) echo "⚪ SQL Server arrêté ($statut)" ;;
esac
;;
sqlcmd) sqlcmd_conteneur ;;
sauvegarder)
base="${2:?Usage : $0 sauvegarder <nom_de_la_base>}"
fichier="${base}-$(date +%Y-%m-%dT%H-%M).bak"
sqlcmd_conteneur -Q "BACKUP DATABASE [$base] TO DISK = N'/var/opt/mssql/data/$fichier' WITH INIT, COMPRESSION"
docker cp "$NOM_CONTENEUR:/var/opt/mssql/data/$fichier" "./$fichier"
echo "Sauvegarde copiée : ./$fichier"
;;
*) sed -n '2,16p' "$0"; exit 1 ;;
esac