# Installing Using Docker (Classic on Windows)

> Build a Windows container image of the Classic build: a Dockerfile on Windows Server Core that installs the Visual C++ and .NET runtimes and starts Kestrel.

- **Product:** DS Server
- **Section:** Documentation
- **Kind:** Topic
- **Path:** DS Server > Installation Guide > Installing Using Docker (Classic on Windows)
- **1832 words**
- **Web URL:** https://docs.textcontrol.com/ds-server/installation/docker-windows/
- **LLMs URL:** https://docs.textcontrol.com/ds-server/installation/docker-windows/llms.txt
- **LLMs-Full URL:** https://docs.textcontrol.com/ds-server/installation/docker-windows/llms-full.txt

---

The Classic build of DS Server runs on Windows only, so its container image is a Windows container: a Windows Server Core base image, the runtimes that Classic needs and the *classic* folder of the DS Server archive. Choose it over the Linux image when you need what the Core build doesn't offer on Linux, such as the document formats DOC and RTF or bitmap page images. [Core and Classic](https://docs.textcontrol.com/ds-server/overview/core-classic/llms-full.txt) lists the differences.

The image below starts DS Server with `dotnet` and Kestrel. It doesn't install IIS: since version 3.0, DS Server runs without IIS, as a .NET application or a Windows service.

### Prerequisites

- **Docker with Windows containers**: Docker Desktop on Windows switched to Windows containers, or Docker on Windows Server.
- **The DS Server archive** *DS Server 5.0.2.zip*, from your Text Control account or, for an evaluation, from the [DS Server download page](https://www.textcontrol.com/product/ds-server/download/).
- **A serial number** to register the server after it starts. See [Licensing Overview](https://docs.textcontrol.com/ds-server/overview/licensing/llms-full.txt).

### Prepare the Folder

1. Create a folder named *DSServerDocker*.
2. Extract the archive and copy its *classic* folder into *DSServerDocker*.
3. Open *classic/hostsettings.json* and remove the HTTPS address, so that the file contains:

    ```json
    {
      "urls": "http://*:5000"
    }
    ```

    Without a certificate, DS Server can't start on the default HTTPS address. [HTTPS](https://docs.textcontrol.com/ds-server/installation/https/llms-full.txt) shows how to configure one.
4. Create a file named *Dockerfile*, without an extension, in *DSServerDocker*:

    ```text
    DSServerDocker\
        Dockerfile
        classic\
            TXTextControl.DocumentServices.dll
            TXTextControl.DocumentServices.exe
            hostsettings.json
            ...
    ```

### Write the Dockerfile

Paste the following content into the *Dockerfile*:

```dockerfile
FROM mcr.microsoft.com/windows/servercore:ltsc2022

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# Visual C++ Redistributable (x64)
RUN Invoke-WebRequest -OutFile vc_redist.x64.exe https://aka.ms/vs/17/release/vc_redist.x64.exe; \
    Start-Process vc_redist.x64.exe -ArgumentList '/passive' -Wait; \
    Remove-Item -Force vc_redist.x64.exe

# .NET 10 Hosting Bundle: .NET Runtime and ASP.NET Core Runtime 10.0
RUN Invoke-WebRequest -OutFile dotnet-hosting-win.exe https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.12/dotnet-hosting-10.0.12-win.exe; \
    Start-Process dotnet-hosting-win.exe -ArgumentList '/passive' -Wait; \
    Remove-Item -Force dotnet-hosting-win.exe

# .NET Desktop Runtime 10.0 for the DocumentProcessing worker process
RUN Invoke-WebRequest -OutFile windowsdesktop-runtime-10.exe https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.12/windowsdesktop-runtime-10.0.12-win-x64.exe; \
    Start-Process windowsdesktop-runtime-10.exe -ArgumentList '/passive' -Wait; \
    Remove-Item -Force windowsdesktop-runtime-10.exe

# .NET Desktop Runtime 8.0 for the Document Editor worker process
RUN Invoke-WebRequest -OutFile windowsdesktop-runtime-8.exe https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.31/windowsdesktop-runtime-8.0.31-win-x64.exe; \
    Start-Process windowsdesktop-runtime-8.exe -ArgumentList '/passive' -Wait; \
    Remove-Item -Force windowsdesktop-runtime-8.exe

# The Classic build of DS Server
COPY classic/ C:/DocumentServices/
WORKDIR C:/DocumentServices

EXPOSE 5000

ENTRYPOINT ["dotnet", "TXTextControl.DocumentServices.dll"]
```

The Dockerfile works as follows:

- **`FROM mcr.microsoft.com/windows/servercore:ltsc2022`** starts from Windows Server Core 2022. Microsoft also publishes `ltsc2025` for Windows Server 2025. Pick the tag that your container host can run; Microsoft's [Windows container base images](https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-base-images) overview describes the images.
- **`SHELL`** runs the following `RUN` instructions in PowerShell and stops the build at the first error.
- **The four `RUN` instructions** download and install the runtimes that [Requirements](https://docs.textcontrol.com/ds-server/installation/requirements/llms-full.txt) lists for Classic: the Visual C++ Redistributable, the .NET 10 Hosting Bundle and the .NET Desktop Runtimes 10.0 and 8.0. The Document Editor worker process of Classic is built for .NET 8.0 and the Windows Desktop runtime, and doesn't start without the 8.0 Desktop Runtime. The urls download the versions current in September 2026, 10.0.12 and 8.0.31; newer patch versions are listed on Microsoft's [.NET 10.0](https://dotnet.microsoft.com/download/dotnet/10.0) and [.NET 8.0](https://dotnet.microsoft.com/download/dotnet/8.0) download pages.
- **`COPY classic/ C:/DocumentServices/`** copies the Classic build into the image, and `WORKDIR` makes it the working directory, where DS Server writes *Admin.db* and its logs.
- **`ENTRYPOINT`** starts DS Server with `dotnet` and Kestrel. The *classic* folder also contains *TXTextControl.DocumentServices.exe*, which starts the same application.

The Classic build has no *Fonts* folder and uses the fonts installed in Windows. Check that the fonts your documents use are available in the image.

### Build and Run the Image

1. Open PowerShell in the *DSServerDocker* folder and build the image:

    ```powershell
    docker build -t dsserver-classic .
    ```
2. Start a container and map port 5000:

    ```powershell
    docker run -d -p 5000:5000 --name mydsserver dsserver-classic
    ```
3. Open `http://localhost:5000` in a browser and sign in with the default credentials, user name `admin` and password `admin`.

Change the admin password, register your serial number and create a security profile, as described in [Installing with Official Image from Docker Hub](https://docs.textcontrol.com/ds-server/installation/docker-hub/#secure-and-license-the-server). The admin database *C:\\DocumentServices\\Admin.db* is lost when the container is removed; to keep it on a volume, set `LiteDbOptions__DatabaseFileName` as shown in [Configuration](https://docs.textcontrol.com/ds-server/installation/configuration/#settings-as-environment-variables).

### Next Steps

- [Requirements](https://docs.textcontrol.com/ds-server/installation/requirements/llms-full.txt): the runtimes and components of each build.
- [Configuration](https://docs.textcontrol.com/ds-server/installation/configuration/llms-full.txt): ports, logs and the admin database.
- [HTTPS](https://docs.textcontrol.com/ds-server/installation/https/llms-full.txt): serve DS Server over HTTPS.
- [Manual Installation](https://docs.textcontrol.com/ds-server/installation/manual/llms-full.txt): install Classic on a Windows server, as a Windows service or in IIS.

---

## Nearby

- **Previous:** [Installing Using Docker (Core on Linux)](https://docs.textcontrol.com/ds-server/installation/docker-linux/llms-full.txt)
- **Next:** [Manual Installation](https://docs.textcontrol.com/ds-server/installation/manual/llms-full.txt)
