From db4f1ba6fc4d49a39214ff5db6625bf7052c39a7 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Mon, 5 Jan 2026 23:06:00 -0500 Subject: [PATCH] Update DEPLOYMENT.md to enhance Docker image publishing instructions Revised the section on building and running Docker images to include a recommended PowerShell script for publishing to a Docker registry. Added detailed options and examples for using the script, while maintaining the manual build instructions for flexibility. This update improves clarity and usability for developers deploying the application. --- DEPLOYMENT.md | 36 +++++++++- publish-docker.ps1 | 172 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 publish-docker.ps1 diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index cbb5c11..e8b12f0 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -107,13 +107,47 @@ stringData: ## Building and Running -### Build the Docker Image +### Publish to Docker Registry (Recommended) + +Use the provided PowerShell script to build and publish the Docker image: + +```powershell +.\publish-docker.ps1 +``` + +**Options:** +- `-Tag "v1.0.0"` - Specify a custom tag (default: "latest") +- `-Registry "docker-registry.kolpacksoftware.com"` - Specify registry URL +- `-ImageName "tsa-chapter-organizer"` - Specify image name +- `-BuildConfiguration "Release"` - Specify build configuration + +**Examples:** +```powershell +# Publish with default settings (latest tag) +.\publish-docker.ps1 + +# Publish with a version tag +.\publish-docker.ps1 -Tag "v1.0.0" + +# Publish with custom registry +.\publish-docker.ps1 -Tag "latest" -Registry "my-registry.com" +``` + +### Build the Docker Image (Manual) + +If you prefer to build manually: ```bash cd WebApp docker build -t tsa-chapter-organizer:latest . ``` +Or from the root directory: + +```bash +docker build -f WebApp/Dockerfile -t tsa-chapter-organizer:latest . +``` + ### Run with Docker Compose ```bash diff --git a/publish-docker.ps1 b/publish-docker.ps1 new file mode 100644 index 0000000..b9935da --- /dev/null +++ b/publish-docker.ps1 @@ -0,0 +1,172 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Builds and publishes the TSA Chapter Organizer Docker image to the registry. + +.DESCRIPTION + This script builds the Docker image from the WebApp Dockerfile and pushes it + to the Docker registry at docker-registry.kolpacksoftware.com. + +.PARAMETER Tag + The tag to use for the Docker image. Defaults to "latest". + +.PARAMETER Registry + The Docker registry URL. Defaults to "docker-registry.kolpacksoftware.com". + +.PARAMETER ImageName + The name of the Docker image. Defaults to "tsa-chapter-organizer". + +.PARAMETER BuildConfiguration + The build configuration to use. Defaults to "Release". + +.EXAMPLE + .\publish-docker.ps1 + +.EXAMPLE + .\publish-docker.ps1 -Tag "v1.0.0" + +.EXAMPLE + .\publish-docker.ps1 -Tag "latest" -Registry "docker-registry.kolpacksoftware.com" +#> + +param( + [string]$Tag = "latest", + [string]$Registry = "docker-registry.kolpacksoftware.com", + [string]$ImageName = "tsa-chapter-organizer", + [string]$BuildConfiguration = "Release" +) + +$ErrorActionPreference = "Continue" + +# Colors for output +function Write-Info { + param([string]$Message) + Write-Host $Message -ForegroundColor Cyan +} + +function Write-Success { + param([string]$Message) + Write-Host $Message -ForegroundColor Green +} + +function Write-ErrorMsg { + param([string]$Message) + Write-Host $Message -ForegroundColor Red +} + +function Write-WarningMsg { + param([string]$Message) + Write-Host $Message -ForegroundColor Yellow +} + +# Check if Docker is available +Write-Info "Checking Docker installation..." +try { + $dockerVersion = docker --version + Write-Success "Docker found: $dockerVersion" +} catch { + Write-ErrorMsg "Docker is not installed or not in PATH. Please install Docker Desktop." + exit 1 +} + +# Check if Docker daemon is running +Write-Info "Checking Docker daemon..." +try { + docker info | Out-Null + Write-Success "Docker daemon is running" +} catch { + Write-ErrorMsg "Docker daemon is not running. Please start Docker Desktop." + exit 1 +} + +# Set up paths +$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path +$rootPath = $scriptPath +$dockerfilePath = Join-Path $rootPath "WebApp\Dockerfile" + +# Verify Dockerfile exists +if (-not (Test-Path $dockerfilePath)) { + Write-ErrorMsg "Dockerfile not found at: $dockerfilePath" + exit 1 +} + +# Build image names +$localImageName = "${ImageName}:${Tag}" +$registryImageName = "${Registry}/${ImageName}:${Tag}" + +Write-Info "=========================================" +Write-Info "Docker Build and Publish Script" +Write-Info "=========================================" +Write-Info "Local Image: $localImageName" +Write-Info "Registry Image: $registryImageName" +Write-Info "Build Config: $BuildConfiguration" +Write-Info "=========================================" +Write-Host "" + +# Step 1: Build the Docker image +Write-Info "Step 1: Building Docker image..." +Write-Info "Building from: $rootPath" +Write-Info "Dockerfile: $dockerfilePath" +Write-Host "" + +$buildArgs = @( + "build", + "-f", $dockerfilePath, + "-t", $localImageName, + "--build-arg", "BUILD_CONFIGURATION=$BuildConfiguration", + $rootPath +) +& docker $buildArgs + +if ($LASTEXITCODE -ne 0) { + Write-ErrorMsg "[ERROR] Docker build failed with exit code $LASTEXITCODE" + exit 1 +} +Write-Success "[OK] Docker image built successfully: $localImageName" + +Write-Host "" + +# Step 2: Tag the image for the registry +Write-Info "Step 2: Tagging image for registry..." +docker tag $localImageName $registryImageName +if ($LASTEXITCODE -ne 0) { + Write-ErrorMsg "[ERROR] Docker tag failed with exit code $LASTEXITCODE" + exit 1 +} +Write-Success "[OK] Image tagged successfully: $registryImageName" + +Write-Host "" + +# Step 3: Push to registry +Write-Info "Step 3: Pushing image to registry..." +Write-Info "Registry: $Registry" +Write-Host "" + +docker push $registryImageName +if ($LASTEXITCODE -ne 0) { + Write-ErrorMsg "[ERROR] Docker push failed with exit code $LASTEXITCODE" + Write-WarningMsg "Make sure you are logged in to the registry:" + Write-WarningMsg " docker login $Registry" + exit 1 +} +Write-Success "[OK] Image pushed successfully to registry" + +Write-Host "" +Write-Info "=========================================" +Write-Success "[OK] Build and publish completed successfully!" +Write-Info "=========================================" +Write-Info "Image available at: $registryImageName" +Write-Host "" + +# Get image digest if available +$null = docker inspect $registryImageName --format '{{.RepoDigests}}' 2>&1 +if ($LASTEXITCODE -eq 0) { + $imageInfo = docker inspect $registryImageName --format '{{.RepoDigests}}' + if ($imageInfo) { + Write-Info "Image digest: $imageInfo" + } +} + +Write-Host "" +Write-Info "You can now pull this image with:" +Write-Host " docker pull $registryImageName" -ForegroundColor Gray