# Docker Image Variants This repository publishes multiple Docker image variants to optimize for size and functionality: ## Base Image: `latest` **Tag:** `ghcr.io/gordonbeeming/copilot_here:latest` The standard copilot_here image with: - Node.js 20 - GitHub Copilot CLI - Git, curl, gpg, gosu ## .NET Images ### Full .NET Image: `dotnet` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet` Extends the base image with: - .NET 8 SDK - .NET 9 SDK - .NET 10 SDK ### .NET 8 Image: `dotnet-8` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet-8` Extends the base image with: - .NET 8 SDK ### .NET 9 Image: `dotnet-9` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet-9` Extends the base image with: - .NET 9 SDK ### .NET 10 Image: `dotnet-10` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet-10` Extends the base image with: - .NET 10 SDK ## Rust Image: `rust` **Tag:** `ghcr.io/gordonbeeming/copilot_here:rust` Extends the base image with: - Rust toolchain (stable) - Cargo package manager - Build tools **Use Case:** Rust development and projects ## Golang Image: `golang` **Tag:** `ghcr.io/gordonbeeming/copilot_here:golang` Extends the base image with: - Go toolchain (latest stable) - Go workspace configured - Build tools **Use Case:** Go development and projects ## Java Image: `java` **Tag:** `ghcr.io/gordonbeeming/copilot_here:java` Extends the base image with: - Java JDK 21 (Eclipse Temurin) - Maven - Gradle - PlantUML (with Graphviz) - Eclipse JDT Language Server (jdtls) **Use Case:** Java development, Maven/Gradle builds, Spring Boot applications, UML diagrams ## Playwright Image: `dotnet-playwright` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet-playwright` Extends the **Full .NET Image** with: - Playwright (latest version) - Chromium browser with all dependencies - System libraries for browser automation **Use Case:** Web testing, browser automation, checking published web content ## .NET + Rust Image: `dotnet-rust` **Tag:** `ghcr.io/gordonbeeming/copilot_here:dotnet-rust` Extends the **Full .NET Image** with: - Rust toolchain (stable) - Cargo package manager - Build tools for both .NET and Rust **Use Case:** Projects combining .NET and Rust code ## Build Dependency Chain ```mermaid graph TD Base[Base Image] --> Dotnet[Full .NET Image] Base --> Dotnet8[.NET 8 Image] Base --> Dotnet9[.NET 9 Image] Base --> Dotnet10[.NET 10 Image] Base --> Rust[Rust Image] Base --> Golang[Golang Image] Base --> Java[Java Image] Dotnet --> Playwright[Playwright Image] Dotnet --> DotnetRust[.NET + Rust Image] ``` ## Version Tags Each image variant is also tagged with the commit SHA for reproducibility: - `ghcr.io/gordonbeeming/copilot_here:sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-8-sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-9-sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-10-sha-` - `ghcr.io/gordonbeeming/copilot_here:rust-sha-` - `ghcr.io/gordonbeeming/copilot_here:golang-sha-` - `ghcr.io/gordonbeeming/copilot_here:java-sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-playwright-sha-` - `ghcr.io/gordonbeeming/copilot_here:dotnet-rust-sha-` ## Image Management You can configure the default image tag to use (e.g., `dotnet`, `dotnet-playwright`, or a specific SHA) so you don't have to pass flags every time. ```text IMAGE MANAGEMENT: --list-images List all available Docker images --show-image Show current default image configuration --set-image Set default image in local config --set-image-global Set default image in global config --clear-image Clear default image from local config --clear-image-global Clear default image from global config ``` ## Custom Images You can use any custom Docker image with the `--image` flag: ```bash # Use a custom image from a registry copilot_here --image my-registry.io/my-image:v1 # Use a locally built image (skip pulling) copilot_here --image my-local-image:dev --no-pull # Save a custom image as your default copilot_here --set-image my-registry.io/my-image:v1 ``` The `--image` flag takes the highest priority, overriding all variant flags and configuration.