Welcome to from-docker-to-kubernetes

Docker Extensions

Learn about the Docker Extensions ecosystem and how to leverage it to enhance your Docker workflow

Docker Extensions

Docker Extensions are add-ons that expand Docker Desktop's capabilities, allowing you to integrate additional tools, services, and features directly into your Docker workflow. These extensions transform Docker Desktop from a simple container management tool into a comprehensive development platform by providing specialized functionality, integrations with other developer tools, and enhanced visualization and management capabilities.

Extension Ecosystem

Types of Extensions

  • Development tools: IDE integrations, code formatters, and language-specific assistants that help with container-based development
  • Debugging utilities: Tools for troubleshooting container issues, inspecting runtime state, and analyzing performance bottlenecks
  • Security scanners: Vulnerability scanners, compliance checkers, and secret detection tools to ensure container security
  • Database managers: GUI interfaces for managing database containers, viewing data, and executing queries
  • Kubernetes tools: Extensions for visualizing, managing, and deploying to Kubernetes clusters
  • Monitoring solutions: Performance monitoring, resource tracking, and visualization dashboards for containers

Benefits

  • Streamlined workflows: Combine multiple tools in a single interface for smoother development processes
  • Integrated tooling: Access specialized tools without leaving Docker Desktop or installing separate applications
  • Reduced context switching: Accomplish more tasks within Docker Desktop, minimizing the need to switch between applications
  • Enhanced productivity: Save time with purpose-built tools designed specifically for container workflows
  • Customized Docker experience: Tailor Docker Desktop to your specific development needs and preferences
  • Simplified onboarding: Easier adoption of Docker best practices through guided experiences and templates
  • Standardized environments: Create consistent tooling across development teams

Getting Started with Extensions

# Install extensions via Docker CLI
docker extension install name-of-extension
# Example: Install Disk Usage Analyzer
docker extension install docker/disk-usage-extension

# View installed extensions
docker extension ls
# Output shows name, version, status, and publisher information
# EXTENSION              VERSION    ENABLED    DESCRIPTION
# docker/disk-usage      0.2.1      true       Disk usage visualization

# Update an extension
docker extension update name-of-extension
# Update to a specific version using tags
docker extension update name-of-extension:1.2.3

# Remove an extension
docker extension rm name-of-extension
# Force removal if the extension is in use
docker extension rm --force name-of-extension

# Disable an extension without removing it
docker extension disable name-of-extension

# Re-enable a disabled extension
docker extension enable name-of-extension

Extension Spotlight

Development Extensions

  • Dev Environments: Create, share, and manage reproducible development environments
    # Create a dev environment from a Git repository
    docker dev-environments create --repo https://github.com/username/project
    
  • Language-specific tools: Tailored assistance for Node.js, Python, Java, Go, and other languages
    # Node.js development container example
    services:
      node-dev:
        image: node:16
        volumes:
          - ./:/app
        working_dir: /app
        command: npm run dev
    
  • API clients: Test and document APIs directly from Docker Desktop
    # Install Postman extension for API testing
    docker extension install postman/docker-extension
    
  • Database managers: GUI tools for MongoDB, PostgreSQL, MySQL, Redis, and other database systems
    # Example: MongoDB database manager
    docker extension install mongodb/mongodb-atlas
    
  • Source control integrations: GitHub, GitLab, and Bitbucket integration for container-based workflows
    # Push container image to GitHub Container Registry
    docker extension install github/docker-extension
    

Monitoring Extensions

  • Resource monitoring: Real-time CPU, memory, network, and disk usage visualization
    # Install resource monitoring extension
    docker extension install docker/resource-usage-extension
    
  • Container health checking: Automated health checks with alerting for container issues
    # Container health check configuration
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    
  • Log visualization: Advanced log searching, filtering, and analysis tools
    # Aggregate and visualize logs from multiple containers
    docker extension install logdna/logdna-extension
    
  • Performance tracking: Identify bottlenecks and performance issues in containerized applications
    # Track network performance between containers
    docker extension install network-analyzer
    
  • Metrics dashboards: Customizable dashboards for monitoring container metrics
    # Create Prometheus/Grafana dashboards for container metrics
    docker extension install grafana/grafana-dashboard
    

Security Extensions

  • Vulnerability scanning: Identify security vulnerabilities in container images
    # Scan images for vulnerabilities
    docker extension install snyk/snyk-container
    # Example output: Found 24 vulnerabilities (7 critical, 10 high, 7 medium)
    
  • Image security analysis: Deep inspection of image layers and configuration for security issues
    # Analyze image security posture
    docker extension install docker/scout-extension
    
  • Secret detection: Find and alert on hardcoded secrets in container images
    # Detect secrets in images
    docker extension install secretscanner/docker-extension
    
  • Compliance checking: Verify containers against CIS benchmarks and security standards
    # Check compliance with security standards
    docker extension install aquasec/trivy-extension
    
  • Policy enforcement: Implement and enforce security policies across container deployments
    # Enforce policies like "no privileged containers"
    docker extension install policy-manager
    

Creating Your Own Extensions

# Initialize a new extension project
docker extension init my-extension
# This creates a template with:
# - Frontend React application
# - Backend service (optional)
# - metadata.json configuration
# - Dockerfile and docker-compose.yml

# Build extension
docker build -t my-extension:latest .
# This builds the extension image including frontend assets
# For multi-container extensions, use docker-compose build

# Install development version
docker extension install my-extension:latest
# Install from local image for testing during development
# Add --force to reinstall if already installed

# Validate extension
docker extension validate my-extension:latest
# Checks for:
# - Valid metadata.json structure
# - Required fields and format
# - UI entry points
# - Docker image format compliance
# - Icon and documentation presence

# Test extension
docker extension dev debug my-extension
# Launches with developer tools and debugging enabled

# Prepare for publishing
docker extension version my-extension 1.0.0
# Updates version in metadata.json

Extension Architecture

# docker-compose.yaml for extension
version: '3.9'
services:
  desktop-extension:
    image: ${DESKTOP_PLUGIN_IMAGE}  # Environment variable set by Docker Desktop
    build:
      context: ./docker-extension   # Frontend UI code location
      args:
        - API_URL=${API_URL:-http://backend:8080}  # Configuration for API endpoint
        - NODE_ENV=production
    volumes:
      - extension_data:/data        # Persistent storage for extension data
  
  backend:
    image: ${BACKEND_IMAGE}         # Environment variable for backend image
    build:
      context: ./backend            # Backend service code location
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # Access to Docker API
      - extension_data:/data                          # Shared data with frontend
    environment:
      - DEBUG=1                     # Enable debug logging
      - LOG_LEVEL=info              # Configure log verbosity
    ports:
      - "8080"                      # Internal port for API
    restart: on-failure             # Automatically restart on failure

volumes:
  extension_data:                   # Named volume for persistent storage

This docker-compose.yaml defines:

  1. A frontend container for the UI that users interact with
  2. A backend container that can access the Docker API and provide additional functionality
  3. Shared volumes for data persistence between components
  4. Environment variables for configuration
  5. Docker socket access for interacting with containers

Extension UI Development

Frontend Components

  • React-based UI: Modern React framework for building interactive interfaces
    // Example React component using Docker UI library
    import { Button, Typography, Select } from '@docker/extension-ui-components';
    
    function ContainerManager() {
      const [containers, setContainers] = useState([]);
      const [selectedContainer, setSelectedContainer] = useState('');
      
      useEffect(() => {
        // Fetch containers from backend
        fetchContainers().then(setContainers);
      }, []);
      
      return (
        <div>
          <Typography variant="h4">Container Manager</Typography>
          <Select
            label="Select Container"
            value={selectedContainer}
            onChange={(e) => setSelectedContainer(e.target.value)}
            options={containers.map(c => ({ label: c.name, value: c.id }))}
          />
          <Button onClick={() => restartContainer(selectedContainer)}>
            Restart Container
          </Button>
        </div>
      );
    }
    
  • Docker Desktop design system: Consistent styling with Docker Desktop's UI
    // Theme integration with Docker Desktop
    import { createDockerDesktopTheme, ThemeProvider } from '@docker/extension-ui-components';
    
    const theme = createDockerDesktopTheme();
    
    function App() {
      return (
        <ThemeProvider theme={theme}>
          <MyExtensionContent />
        </ThemeProvider>
      );
    }
    
  • Built-in component library: Pre-built UI components for common patterns
    // Built-in components for consistent UX
    import { 
      Table, 
      TableHead, 
      TableRow, 
      TableCell, 
      TableBody,
      Card,
      Alert,
      Tabs,
      Tab
    } from '@docker/extension-ui-components';
    
  • Responsive layouts: Adaptable interfaces for different screen sizes
    // Responsive grid layout
    import { Grid, Box } from '@docker/extension-ui-components';
    
    function Dashboard() {
      return (
        <Grid container spacing={2}>
          <Grid item xs={12} md={6}>
            <Box p={2}>
              <MetricsPanel />
            </Box>
          </Grid>
          <Grid item xs={12} md={6}>
            <Box p={2}>
              <ControlPanel />
            </Box>
          </Grid>
        </Grid>
      );
    }
    
  • Dark/light mode support: Automatic theme adaptation
    // Theme-aware styling
    import { useTheme } from '@docker/extension-ui-components';
    
    function ThemedComponent() {
      const theme = useTheme();
      return (
        <div style={{ 
          background: theme.palette.background.default,
          color: theme.palette.text.primary 
        }}>
          Content adapts to light/dark mode
        </div>
      );
    }
    

Backend Services

  • Containerized services: Backend logic runs in separate containers
    # Backend Dockerfile
    FROM golang:1.19-alpine AS builder
    WORKDIR /app
    COPY go.* ./
    RUN go mod download
    COPY . .
    RUN go build -o extension-backend
    
    FROM alpine
    COPY --from=builder /app/extension-backend /usr/local/bin/
    ENTRYPOINT ["extension-backend"]
    
  • API endpoints: RESTful or GraphQL APIs for frontend communication
    // Example Go backend with REST API
    func main() {
      r := mux.NewRouter()
      r.HandleFunc("/api/containers", getContainers).Methods("GET")
      r.HandleFunc("/api/containers/{id}/restart", restartContainer).Methods("POST")
      
      log.Fatal(http.ListenAndServe(":8080", r))
    }
    
  • Docker CLI integration: Execute Docker commands from the backend
    // Execute Docker commands from Go
    func restartContainer(id string) error {
      cmd := exec.Command("docker", "restart", id)
      return cmd.Run()
    }
    
  • Host system interaction: Access local resources when needed
    // Read host system information
    func getSystemInfo() (map[string]interface{}, error) {
      info := make(map[string]interface{})
      
      // Get host memory info
      memInfo, err := mem.VirtualMemory()
      if err != nil {
        return nil, err
      }
      info["memory"] = memInfo
      
      // Get CPU info
      cpuInfo, err := cpu.Info()
      if err != nil {
        return nil, err
      }
      info["cpu"] = cpuInfo
      
      return info, nil
    }
    
  • Docker daemon communication: Direct interaction with the Docker API
    // Use Docker SDK to interact with daemon
    func getContainers() ([]types.Container, error) {
      cli, err := client.NewClientWithOpts(client.FromEnv)
      if err != nil {
        return nil, err
      }
      
      return cli.ContainerList(context.Background(), types.ContainerListOptions{
        All: true,
      })
    }
    

Extension Configuration

// metadata.json
{
  "name": "my-extension",
  "version": "1.0.0",
  "title": "My Docker Extension",
  "description": "A helpful Docker Desktop extension",
  "vendor": {
    "name": "My Company",
    "url": "https://example.com"
  },
  "icon": "icon.svg",
  "vm": {
    "composefile": "docker-compose.yaml",
    "host": {
      "binaries": [
        {
          "darwin": [
            {
              "path": "/bin/host-integration"
            }
          ],
          "windows": [
            {
              "path": "/bin/host-integration.exe"
            }
          ],
          "linux": [
            {
              "path": "/bin/host-integration"
            }
          ]
        }
      ]
    }
  },
  "ui": {
    "dashboard-tab": {
      "title": "My Extension",
      "root": "/ui",
      "src": "index.html"
    },
    "container-tab": {
      "title": "Container Tools",
      "root": "/container",
      "src": "container.html"
    }
  },
  "host": {
    "binaries": [
      {
        "darwin": [
          {
            "path": "/bin/host-binary"
          }
        ],
        "windows": [
          {
            "path": "/bin/host-binary.exe"
          }
        ],
        "linux": [
          {
            "path": "/bin/host-binary"
          }
        ]
      }
    ]
  }
}

The metadata.json file is crucial for extension configuration and includes:

  1. Basic information: Name, version, title, and description for the extension
  2. Vendor details: Information about the extension developer or company
  3. Icon: Path to the extension's icon file (SVG recommended)
  4. VM configuration: Docker Compose file for running backend services
  5. UI configuration:
    • Dashboard tab for the main extension view
    • Optional container tab that appears in container context menus
  6. Host integration: Optional binaries that can run on the host system
  7. Permissions: Defines what the extension can access (implied by configuration)

Testing Extensions

Publishing Extensions

Marketplace Submission

  • Create a Docker Hub account: Required for official publishing
    # Sign up at hub.docker.com
    # Verify email address
    # Set up two-factor authentication for security
    
  • Prepare extension documentation: Create comprehensive usage documentation
    # My Docker Extension
    
    ## Features
    - Feature 1: Description and screenshots
    - Feature 2: Description and screenshots
    
    ## Installation
    ```bash
    docker extension install myname/my-extension:latest
    

    Usage

    1. Open Docker Desktop
    2. Navigate to the extension tab
    3. ...

    Configuration


    The extension supports the following configuration options...

    Troubleshooting


    Common issues and solutions...
  • Submit for review: Follow official submission process
    # Prepare submission package
    docker extension prepare-submission myname/my-extension:latest
    
    # Submit through Docker Extension Marketplace portal
    # Provide:
    # - Extension source code or link to repository
    # - Documentation
    # - Test account if needed
    # - Contact information
    
  • Address feedback: Iterate based on review comments
    # Common feedback areas:
    # - Security concerns
    # - UI/UX improvements
    # - Documentation clarity
    # - Performance issues
    # - Compliance with Docker Extension guidelines
    
  • Publish to marketplace: Final step after approval
    # Once approved, publish using:
    docker extension publish myname/my-extension:1.0.0
    
    # Update listing with release notes:
    docker extension publish myname/my-extension:1.0.1 \
      --release-notes "Fixed bug in container view, improved performance"
    

Private Distribution

  • Build extension image: Create a distributable package
    # Build extension
    docker build -t company-registry.com/extensions/my-extension:1.0.0 .
    
    # Create a versioned tarball for distribution
    docker save company-registry.com/extensions/my-extension:1.0.0 -o my-extension-1.0.0.tar
    
  • Push to private registry: Store in your organization's registry
    # Log in to private registry
    docker login company-registry.com
    
    # Push extension image
    docker push company-registry.com/extensions/my-extension:1.0.0
    
    # Tag as latest for convenience
    docker tag company-registry.com/extensions/my-extension:1.0.0 company-registry.com/extensions/my-extension:latest
    docker push company-registry.com/extensions/my-extension:latest
    
  • Share installation instructions: Create internal documentation
    # Installing My Extension
    
    ## Prerequisites
    - Docker Desktop 4.12.0 or later
    - Access to company registry
    
    ## Installation Steps
    1. Ensure you're logged into the company registry:
       ```bash
       docker login company-registry.com
    
    1. Install the extension:
      docker extension install company-registry.com/extensions/my-extension:latest
      
    2. Verify installation:
      docker extension ls
      
  • Provide configuration details: Document setup requirements
    ## Configuration
    
    ### Environment Variables
    The extension uses the following environment variables:
    - `MY_API_KEY`: API key for the internal service
    - `SERVICE_URL`: URL of the backend service
    
    ### Permissions
    This extension requires:
    - Read access to containers
    - Write access to volumes
    - Network access to internal services
    
    ### Setup Instructions
    1. Generate an API key in the internal portal
    2. Configure the key in Docker Desktop settings
    3. Restart the extension
    
  • Support documentation: Create troubleshooting resources
    ## Troubleshooting
    
    ### Common Issues
    
    #### Extension not loading
    Check Docker Desktop logs at `~/Library/Logs/Docker Desktop`
    
    #### Authentication failures
    Verify your API key is correctly configured
    
    ### Support Contacts
    - Internal Slack: #docker-extension-support
    - Email: extension-support@company.com
    - Issue tracker: https://internal-jira.company.com/projects/EXT
    

Extension Best Practices

# docker-compose.yaml with best practices
version: '3.9'
services:
  desktop-extension:
    image: ${DESKTOP_PLUGIN_IMAGE}
    build:
      context: ./ui
      args:
        - API_URL=http://backend:8080  # Configure frontend to communicate with backend
        - NODE_ENV=production          # Build in production mode
      dockerfile: Dockerfile.ui        # Use dedicated UI Dockerfile
    labels:
      com.docker.extension.title: "My Extension"  # Extension metadata as labels
      com.docker.extension.vendor: "My Company"
      com.docker.extension.version: "${VERSION:-dev}"
  
  backend:
    image: ${BACKEND_IMAGE}
    build: 
      context: ./backend
      dockerfile: Dockerfile.backend   # Use dedicated backend Dockerfile
    environment:
      - LOG_LEVEL=${LOG_LEVEL:-info}   # Configurable logging level
      - DEBUG=${DEBUG:-false}          # Enable debugging if needed
      - METRICS_ENABLED=true           # Enable performance metrics
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # Docker API access (read-only)
      - extension_data:/data                          # Persistent data storage
    healthcheck:                        # Health monitoring
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 15s
    restart: unless-stopped             # Ensure backend stays running

Enterprise Extensions

Troubleshooting

Common Issues

  • Extension not appearing after installation:
    • Caused by installation failures, incompatible Docker Desktop versions, or UI loading issues
    • Check installation logs for errors
    • Verify extension compatibility with your Docker Desktop version
  • UI rendering problems:
    • May result from JavaScript errors, CSS conflicts, or React version mismatches
    • Often appears as blank screens or broken layouts
    • Can be related to theme compatibility issues
  • Backend connectivity issues:
    • Frontend unable to communicate with backend services
    • Network configuration problems or blocked ports
    • Backend service crashes or failed health checks
  • Permission problems:
    • Insufficient permissions to access Docker API
    • Missing access to host filesystem or resources
    • Security restrictions preventing extension operation
  • Resource constraints:
    • Extension consuming excessive CPU or memory
    • Docker Desktop resource limits too restrictive
    • Background processes causing performance degradation
  • Version compatibility:
    • Extension developed for different Docker Desktop API version
    • Outdated extensions not compatible with newer Docker Desktop
    • Deprecated APIs or features no longer available

Solutions

# Restart Docker Desktop to reload extensions
docker desktop restart
# This refreshes the extension system and often resolves UI issues

# Check extension logs for detailed error information
docker extension logs extension-name
# Look for error messages, exceptions, or connectivity issues

# Check extension status
docker extension ls
# Verify the extension is properly installed and enabled

# Reinstall extension to resolve corruption issues
docker extension rm extension-name
docker extension install extension-name
# Use --force if extension removal is stuck

# Update extension to the latest version
docker extension update extension-name
# May resolve compatibility issues with newer Docker Desktop

# Check Docker Desktop logs for system-level issues
docker desktop diagnose
# Generates a diagnostic bundle with comprehensive logs

# View backend container logs directly
docker logs $(docker ps --filter "label=com.docker.desktop.extension=extension-name" -q)
# Useful for debugging backend service issues

# Increase Docker Desktop resources
# In Docker Desktop > Settings > Resources
# Allocate more memory/CPU if extensions are resource-intensive

# Test in isolation
docker extension disable --all
docker extension enable extension-name
# Determines if other extensions are causing conflicts

Extension Integrations

Future of Extensions

Upcoming Features

  • Enhanced API capabilities: Expanded Docker Desktop APIs for deeper integration
    // Example future API capabilities
    docker.hostFileSystem.selectDirectory()  // File system access API
    docker.networking.createTunnel()         // Network tunneling API
    docker.containers.debug()                // Advanced debugging API
    docker.extensions.share()                // Extension sharing API
    
  • Improved performance: Faster loading and more efficient resource usage
    // Progressive loading pattern for better performance
    function ExtensionApp() {
      const [loaded, setLoaded] = useState(false);
      
      useEffect(() => {
        // Load essential UI immediately
        // Then lazy-load heavier components
        import('./LazyLoadedComponents').then(() => {
          setLoaded(true);
        });
      }, []);
      
      return (
        <>
          <CoreUI />
          {loaded && <AdvancedFeatures />}
        </>
      );
    }
    
  • More integration options: Expanded ecosystem connections
    // Broader integration capabilities
    // Future extensions might integrate with:
    // - Code scanning and quality tools
    // - ML model training and deployment
    // - IoT device management
    // - Edge computing frameworks
    // - Service mesh visualization
    
  • Cross-platform extensions: Better support across operating systems
    // Unified cross-platform API
    function getPlatformPath() {
      const platform = window.ddClient.host.platform; // 'darwin', 'win32', 'linux'
      
      const paths = {
        darwin: '/Users/shared/data',
        win32: 'C:\\ProgramData\\DockerExtension',
        linux: '/var/lib/docker-extension'
      };
      
      return paths[platform];
    }
    
  • AI-powered extensions: Intelligent assistance for container workflows
    // AI capabilities for extensions
    async function suggestOptimizations(dockerfile) {
      const response = await fetch('https://api.extension.ai/analyze', {
        method: 'POST',
        body: JSON.stringify({ dockerfile })
      });
      
      return await response.json();
      // Returns suggestions like:
      // - Multi-stage build optimizations
      // - Security improvements
      // - Size reduction opportunities
      // - Performance enhancements
    }
    

Community Growth

  • Open source extension libraries: Shared components and utilities
    // Example community library
    import { ContainerSelector, LogViewer, ResourceMonitor } from '@docker-community/extension-components';
    
    function MyExtension() {
      return (
        <div>
          <ContainerSelector onChange={handleContainerSelect} />
          <ResourceMonitor containerId={selectedContainer} />
          <LogViewer containerId={selectedContainer} />
        </div>
      );
    }
    
  • Community-driven marketplace: User ratings and extension discovery
    // Extension manifest with community metadata
    {
      "name": "community-extension",
      "version": "1.0.0",
      "community": {
        "author": "community-developer",
        "stars": 4.5,
        "downloads": 12500,
        "tags": ["monitoring", "visualization", "open-source"],
        "repository": "https://github.com/user/community-extension"
      }
    }
    
  • Extension development workshops: Educational resources
    # Docker Extension Workshop
    
    ## Sessions
    1. Setting up your development environment
    2. Creating your first extension
    3. Advanced backend services
    4. Publishing and distribution
    5. Community contribution guidelines
    
    ## Hands-on exercises
    - Build a container health dashboard
    - Create a development workflow extension
    - Implement a multi-container orchestration UI
    
  • Best practice sharing: Standardized patterns and approaches
    // Best practice: Extension state management
    import { createExtensionStore } from '@docker-community/extension-store';
    
    const store = createExtensionStore({
      containers: [],
      selectedContainer: null,
      isLoading: false
    });
    
    // React hook for accessing store
    function useExtensionStore() {
      return store;
    }
    
  • Collaborative development: Joint projects and shared governance
    # Collaborative extension governance example
    governance:
      maintainers:
        - organization: Docker
          members: [maintainer1, maintainer2]
        - organization: Community
          members: [contributor1, contributor2]
      
      decision_process: "Majority vote from maintainers"
      contribution_guidelines: "CONTRIBUTING.md"
      roadmap: "https://github.com/org/extension/projects/roadmap"
    

Case Studies

Resources

Documentation

  • Docker Extensions Documentation: Comprehensive guides on creating, publishing, and using extensions
    # Quick start from docs
    # 1. Initialize a new extension project
    docker extension init my-extension
    
    # 2. Build the extension
    docker build -t my-extension:latest .
    
    # 3. Install for development
    docker extension install my-extension:latest
    
  • Extension SDK Reference: Detailed API documentation and capabilities
    // Example from SDK documentation
    import { createDockerDesktopClient } from '@docker/extension-api-client';
    
    const client = createDockerDesktopClient();
    
    function listContainers() {
      return client.docker.listContainers();
    }
    
    function getExtensionContext() {
      return client.extension.getContext();
    }
    
  • UI Component Library: Reference for built-in React components
    // Component library examples
    import { 
      Button, 
      TextField, 
      Select, 
      Table, 
      Typography, 
      Tooltip 
    } from '@docker/extension-ui-components';
    
    function MyExtensionUI() {
      return (
        <div>
          <Typography variant="h4">My Extension</Typography>
          <TextField label="Container Name" />
          <Button variant="contained">Create Container</Button>
        </div>
      );
    }
    
  • Extension Tutorials: Step-by-step guides for specific extension types
    # Follow tutorial steps
    # Example: Creating a React + Go extension
    mkdir my-react-go-extension
    cd my-react-go-extension
    docker extension init --name my-react-go-extension --template react-go
    
  • Extension Samples Repository: Reference implementations
    # Clone sample repository
    git clone https://github.com/docker/extensions-sdk.git
    cd extensions-sdk/samples
    
    # Explore different extension types
    ls -la
    # - react-extension/
    # - golang-extension/
    # - flask-extension/
    # - vm-ui-extension/
    

Community

  • Docker Community Forums: Discussion and support for extension developers
    # Popular forum categories
    - Extension Development
    - Extension Feature Requests
    - Troubleshooting
    - Extension Showcase
    
  • Docker GitHub: Source code and issue tracking
    # Fork the extensions-sdk repository
    git clone https://github.com/docker/extensions-sdk.git
    
    # Create a new branch for your contribution
    git checkout -b feature/my-contribution
    
    # Submit pull requests for improvements
    
  • Docker Discord: Real-time community support
    # Key Discord channels
    - #extension-developers
    - #extension-showcase
    - #desktop-extensions-help
    
  • Docker Extension Workshop: Hands-on training materials
    # Workshop topics
    - Setting up development environment
    - Creating your first extension
    - Advanced backend services
    - Publishing your extension
    
  • DockerCon Sessions: Conference presentations on extensions
    # Recent presentations
    - "Building Docker Extensions: Best Practices"
    - "Extending Docker Desktop for Enterprise Workflows"
    - "From Development to Production with Docker Extensions"