diff --git a/docker/start.ps1 b/docker/start.ps1 new file mode 100644 index 0000000..8523dad --- /dev/null +++ b/docker/start.ps1 @@ -0,0 +1,38 @@ +$ErrorActionPreference = "Stop" + +$CONTAINER = "ewc2025-mysql" +$IMAGE = "mysql:8.4" +$ROOT_PASSWORD = "ewc2025root" +$DATABASE = "ewc2025" +$PORT = "13306" + +$SQL_DIR = Resolve-Path "$PSScriptRoot\..\sql" + +$exists = docker ps -a --format '{{.Names}}' | Where-Object { $_ -eq $CONTAINER } + +if ($exists) { + Write-Host "Container '$CONTAINER' already exists -- starting it." + docker start $CONTAINER +} else { + Write-Host "Creating and starting '$CONTAINER'." + docker run -d ` + --name $CONTAINER ` + -e MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD ` + -e MYSQL_DATABASE=$DATABASE ` + -p "${PORT}:3306" ` + -v "${CONTAINER}-data:/var/lib/mysql" ` + -v "${SQL_DIR}\schema.sql:/docker-entrypoint-initdb.d/01_schema.sql:ro" ` + $IMAGE +} + +Write-Host "Waiting for MySQL to be ready..." +while ($true) { + $result = docker exec $CONTAINER mysqladmin ping -uroot -p"$ROOT_PASSWORD" --silent 2>$null + if ($LASTEXITCODE -eq 0) { break } + Start-Sleep -Seconds 1 +} + +Write-Host "MySQL 8.4 is up." +Write-Host " Host: 127.0.0.1:${PORT}" +Write-Host " Database: $DATABASE" +Write-Host " User: root / $ROOT_PASSWORD" diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 0000000..20a5b0e --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -euo pipefail + +CONTAINER="ewc2025-mysql" +IMAGE="mysql:8.4" +ROOT_PASSWORD="ewc2025root" +DATABASE="ewc2025" +PORT="13306" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SQL_DIR="$(cd "${SCRIPT_DIR}/../sql" && pwd)" + +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then + echo "Container '${CONTAINER}' already exists — starting it." + docker start "${CONTAINER}" +else + echo "Creating and starting '${CONTAINER}'." + docker run -d \ + --name "${CONTAINER}" \ + -e MYSQL_ROOT_PASSWORD="${ROOT_PASSWORD}" \ + -e MYSQL_DATABASE="${DATABASE}" \ + -p "${PORT}:3306" \ + -v "${CONTAINER}-data:/var/lib/mysql" \ + -v "${SQL_DIR}/schema.sql:/docker-entrypoint-initdb.d/01_schema.sql:ro" \ + "${IMAGE}" +fi + +echo "Waiting for MySQL to be ready..." +until docker exec "${CONTAINER}" mysqladmin ping -uroot -p"${ROOT_PASSWORD}" --silent 2>/dev/null; do + sleep 1 +done + +echo "MySQL 8.4 is up." +echo " Host: 127.0.0.1:${PORT}" +echo " Database: ${DATABASE}" +echo " User: root / ${ROOT_PASSWORD}" diff --git a/docker/stop.ps1 b/docker/stop.ps1 new file mode 100644 index 0000000..624641b --- /dev/null +++ b/docker/stop.ps1 @@ -0,0 +1,13 @@ +$ErrorActionPreference = "Stop" + +$CONTAINER = "ewc2025-mysql" + +$exists = docker ps -a --format '{{.Names}}' | Where-Object { $_ -eq $CONTAINER } + +if (-not $exists) { + Write-Host "Container '$CONTAINER' does not exist." + exit 0 +} + +docker stop $CONTAINER +Write-Host "Container '$CONTAINER' stopped. Data volume preserved." diff --git a/docker/stop.sh b/docker/stop.sh new file mode 100755 index 0000000..365ec45 --- /dev/null +++ b/docker/stop.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +CONTAINER="ewc2025-mysql" + +if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then + echo "Container '${CONTAINER}' does not exist." + exit 0 +fi + +docker stop "${CONTAINER}" +echo "Container '${CONTAINER}' stopped. Data volume preserved."