Table of Contents

Worker Service Sample

This sample demonstrates containerizing a .NET Worker Service for background processing.

Overview

Project Type: .NET Worker Service
Location: samples/Worker/
Image Name: worker-sample
Default Port: None (background service)

Quick Start

cd samples/Worker
dotnet publish --configuration Release
docker run worker-sample:latest

What This Demonstrates

  • Background service containerization
  • Long-running tasks
  • IHostedService implementation
  • Graceful shutdown handling
  • Logging in containers

Project Structure

Worker/
├── Worker.cs           # Background service implementation
├── Program.cs          # Host configuration
├── Worker.csproj       # Project with Docker config
└── Dockerfile          # Auto-generated

Worker Implementation

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

Docker Configuration

<PropertyGroup>
  <DockerEnabled>true</DockerEnabled>
  <DockerImageName>worker-sample</DockerImageName>
  <DockerImageTag>latest</DockerImageTag>
  <!-- No port exposed for worker services -->
</PropertyGroup>

Running the Sample

# Build image
dotnet publish --configuration Release

# Run container
docker run --name worker worker-sample:latest

# View logs
docker logs -f worker

# Stop gracefully
docker stop worker

Graceful Shutdown

The worker handles cancellation tokens for graceful shutdown:

# Send SIGTERM (Docker stop)
docker stop worker

# Worker receives cancellation and completes current work

Next Steps