Docker/Windows

From Omnia
Jump to navigation Jump to search

Windows

Windows Containers GitHub

Github microsoft/Windows-Containers
https://github.com/microsoft/Windows-Containers

Compatability

Windows requires the host OS version to match the container OS version. If you want to run a container based on a newer Windows build, make sure you have an equivalent host build. Otherwise, you can use Hyper-V isolation to run older containers on new host builds. You can read more on Windows Container Version Compatibility in our Container Docs⁠ ( https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility ).

Windows Repos

Windows Server Image

This is a base image for Windows Server containers. This image carries the Server base OS image. It is only available with Windows Server 2022 release and with Windows Server 2025 release.

Windows Server Images:

https://hub.docker.com/r/microsoft/windows-server

The default entrypoint is for this image is Cmd.exe. To run the image:

docker run mcr.microsoft.com/windows/server:ltsc2025

Sample Images in this repo:

  • ltsc2025
  • ltsc2022

Windows 10 Images

Windows 10 Images:

https://hub.docker.com/r/microsoft/windows

Note: This repo does not publish or maintain alatesttag. Please declare a specific tag when pulling or referencing images from this repo.

All tags:

https://mcr.microsoft.com/v2/windows/tags/list

Default entry point for this image:

docker run mcr.microsoft.com/windows:ltsc2019

Sample Images in this repo:

  • mcr.microsoft.com/windows:ltsc2019
  • 20H2
  • 1909
  • ltsc2019


you can run a Windows Server container with:

docker run -it mcr.microsoft.com/windows/servercore:1809 powershell

Hello-world: (windows-amd64, nanoserver-1809)

docker run -it hello-world

Hello-World

C:\> docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (windows-amd64, nanoserver-1809)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run a Windows Server container with:
 PS C:\> docker run -it mcr.microsoft.com/windows/servercore:1809 powershell

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Install Docker Community Edition

Docker Community Edition (CE) provides a standard runtime environment for containers with a common API and command-line interface (CLI). It is managed by the open source community as part of the Moby Project.

Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1
.\install-docker-ce.ps1

src:

https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1

---

Get started: Prep Windows for containers
https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=dockerce
Docker Engine on Windows
https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon

Install Docker Community Edition (CE) reference:

Prepare Windows operating system containers | Microsoft Learn
https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=dockerce#windows-server-1

Install Docker Server Edition

AS OF 2023 THIS HAS BEEN DISCONTINUED
GitHub - OneGet/MicrosoftDockerProvider: Provider to search, save and install Docker
https://github.com/OneGet/MicrosoftDockerProvider
Reminder - Updates to Windows Container Runtime Support - Microsoft Community Hub
https://techcommunity.microsoft.com/t5/containers/reminder-updates-to-windows-container-runtime-support/ba-p/3620989
Updates to the Windows Container Runtime support - Microsoft Community Hub
https://techcommunity.microsoft.com/t5/containers/updates-to-the-windows-container-runtime-support/ba-p/2788799
Don't Panic: Kubernetes and Docker | Kubernetes
https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/

Just like Community Edition, but allows for Linux containers

Enable containers:

Enable-WindowsOptionalFeature -Online -FeatureName Containers

Reboot:

Restart-Computer -Force

Install Docker:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider 

Restart:

Restart-Computer -Force

Start service:

Start-Service Docker
Stop-Service Docker
Get-Service docker

Server core:

# 2022
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
# 2019
docker pull mcr.microsoft.com/windows/servercore:ltsc2019

Run Linux Containers (Nested):

Get-VM WinContainerHost | Set-VMProcessor -ExposeVirtualizationExtensions $true
[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")
Restart-Service docker

daemon.conf:

$configfile = @”
{
    “experimental”: true
}
“@
$configfile|Out-File -FilePath C:\ProgramData\docker\config\daemon.json -Encoding ascii -Force

LCOW:

Invoke-WebRequest -Uri "https://github.com/linuxkit/lcow/releases/download/v4.14.35-v0.3.9/release.zip" -UseBasicParsing -OutFile release.zip
Expand-Archive release.zip -DestinationPath "$Env:ProgramFiles\Linux Containers\."

Run ubuntu:

docker run -it --rm ubuntu /bin/bash

Switch back to Windows Containers:

[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "$null", "Machine")

refs:

Docker: Ejecutar containers Linux en Windows Server 2022 - Blog Virtualizacion
https://www.maquinasvirtuales.eu/docker-ejecutar-containers-linux-en-windows-server-2022/
Run Docker on Windows Server 2019 / 2022 | ComputingForGeeks
https://computingforgeeks.com/how-to-run-docker-containers-on-windows-server/

Linux Ubuntu Container

Run Linux containers on Windows | Ubuntu
https://ubuntu.com/tutorials/windows-ubuntu-hyperv-containers

Container Desktop

container-desktop
https://container-desktop.io/
Container Desktop is an open-source alternative to Docker Desktop. It enables you to build, push, pull and run Linux containers on Microsoft Windows, by providing a seamless integration with Docker Engine Community Edition running on Windows Subsystem for Linux. The Container Desktop bundles the open-source docker and docker-compose cli clients for a native and simple user experience.

Why Container Desktop?¶

  • Free and open-source;
  • Easy and hassle free installation experience;
  • Plain and simple, no unnecessary bells and whistles;

Download:

Stevedore

Docker Windows Containers Alternative

GitHub - slonopotamus/stevedore: 🚢 Docker distribution for Windows Containers that Just Works
https://github.com/slonopotamus/stevedore

Stevedore Linux Container Support

Back in summer 2021, when this project was started, there were no known alternatives to Docker Desktop. Container Desktop didn’t exist yet, and Rancher Desktop just released initial 0.1.0 release.

Today, things are very different. Rancher Desktop provides both Docker and Kubernetes support, with a very advanced UI. Stevedore is very unlikely to even come closer to Rancher Desktop functionality due to limited developer resources and lack of motivation.

Thus, starting with 0.10.0 release, Stevedore focuses on its primary goal - providing a convenient way to install Docker for Windows containers.

If you want to run Linux containers, consider one of these projects:

Windows Test Image

Hello World:

docker run hello-world:nanoserver

Something more ambition - try run powershell:

docker run -it mcr.microsoft.com/windows/servercore:ltsc2022 powershell

Config

C:\programdata\docker\config\daemon.json
dockerd | Docker Docs
https://docs.docker.com/reference/cli/dockerd/#/windows-configuration-file

ref:

Isolation

Configure container isolation technology (Windows)
https://docs.docker.com/reference/cli/dockerd/#configure-container-isolation-technology-windows

For Windows containers, you can specify the default container isolation technology to use, using the --exec-opt isolation flag.

The following example makes hyperv the default isolation technology:

dockerd --exec-opt isolation=hyperv
dockerd --exec-opt isolation=process

If no isolation value is specified on daemon start, on Windows client, the default is hyperv, and on Windows server, the default is process.

Isolation

Windows Server Containers use Hyper-V isolation by default on Windows 10 and 11 to provide developers with the same kernel version and configuration that will be used in production.

Switch to Windows Containers

& $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon .

Service

See service:

sc qc docker

Service is running as: docker

C:\WINDOWS\system32\dockerd.exe --run-service --service-name docker

Add a Docker Group to allow normal users to manage docker: (run as administrator)

net localgroup docker-users /add

Add user to group:

net localgroup docker-users [USER] /add

Update service to use docker-users group:

# -G, --group string  Group for the unix socket (default "docker")
sc config docker binPath="C:\WINDOWS\system32\dockerd.exe --run-service --service-name docker -G docker-users"
sc config docker binPath="C:\Windows\System32\dockerd.exe --run-service --config-file=C:\ProgramData\docker\config\daemon.json"

Restart service:

net stop docker
net start docker

See updated service:

C:\> sc qc docker
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: docker
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\WINDOWS\system32\dockerd.exe --run-service --service-name docker -G docker-users
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Docker Engine
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

daemon.json option:

C:\ProgramData\docker\config\daemon.json
{
  "registry-mirrors": ["https://internal-docker-mirror:6609"],
  "group": "docker-users",
  "debug": true,
  "hosts": ["npipe://", "tcp://0.0.0.0:2375"],
  "experimental": false,
  "exec-opts": ["isolation=process"],
  "max-concurrent-downloads": 100,
  "max-concurrent-uploads": 100,
  "data-root": "C:\\docker_data",
  "storage-opts" : [ "size=200G" ]
}

Moby Project

Moby Project
https://mobyproject.org/
What is Moby?
Moby is an open framework created by Docker to assemble specialized container systems without reinventing the wheel. It provides a “lego set” of dozens of standard components and a framework for assembling them into custom platforms.

Uninstall Docker

See https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon

Docker in WSL

See Docker/Docker in WSL

keywords