All Articles
มาลง Docker ใน Windows Server ผ่าน CLI

2023-12-22

มาลง Docker ใน Windows Server ผ่าน CLI

Read on Medium

มาลง Docker ใน Windows Server ผ่าน CLI

image from : https://www.architecting.it/blog/windows-containers-making-windows-server-relevant-again

สืบเนื่องมาจากได้รับ requirement มาให้ setup ตัว docker แต่มันติ๊ดดดดอยู่เรื่องนึงคือ server นั้นคือ windows server สำหรับสาย linux แบบผมนี่ถือว่าหนักเอาเรื่อง เพราะเคยไปจับ ๆ เล่นแล้วรู้สึกว่ามันไม่อ่อนโยนต่อผมเท่าไหร่เลย 5555555

โอเคเข้าเรื่อง คือไอตัว windows server ใหม่ ๆ เนี่ย จริง ๆ มันก็ค่อนข้างเป็นมิตรกับ docker แล้ว ก็คือลง docker desktop ก็จบปิ๊งอะไรทำนองนั้น แต่ก็ไม่น้อยเลยที่เราจะเจอปัจจัยไม่คาดคิดในหลาย ๆ อย่าง เช่น ปัญหาจาก hardware, การ config พวก bios อะไรต่าง ๆ ซึ่งหลังจากผมลองผิดลองถูกมาอย่างยาวนาน ก็เลยได้ solution นึงที่ลงผ่าน cli มา ซึ่งก็ถือว่าใช้ได้ในระดับนึงเลย เลยอยากจะเขียนเก็บไว้ให้สมกับเวลา research 😂😂 โอเคมาเริ่มกันเลย

ขั้นตอนที่ 1 : เปิดฟีเจอร์ container

ขั้นตอนแรกคือเปิดใช้งาน feature ของ Windows Server containers เปิด PowerShell ในฐานะ Administrator แล้วรันคำสั่งตามนี้

Enable-WindowsOptionalFeature -Online -FeatureName Containers หากมี promt ขึ้นมาให้กด y เพื่อยอมรับ

ขั้นตอนที่ 2 : ติดตั้ง Docker Engine บน Windows Server

เมื่อเปิดใช้งาน feature Containers บน Windows Server แล้ว ติดตั้ง Docker Engine และ Client ล่าสุดโดยการรันคำสั่งด้านล่างใน PowerShell

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 หากติดตั้งเรียบร้อย ใน powershell ของเราจะโชว์ข้อมูลของ repository , image และอื่น ๆ ขึ้นมา แต่มันจะยังไม่มีข้อมูลในลิสแต่อย่างใดเพราะเรายังไม่ได้ทำอะไรกับมัน หากขึ้นตามที่กล่าว restart server 1 รอบครับ

Restart-Computer -Force หลังจาก server start ขึ้นมา ลองใช้ command

docker version หากขึ้นข้อมูลต่าง ๆ ของ docker เป็นอันว่าเรียบร้อยครับ ละเราจะมาลอง start service docker กัน โดยใช้คำสั่ง

Start-Service Docker ถ้าอยากจะปิด service ก็

Stop-Service Docker ขั้นตอนที่ 3 : รัน Docker Container

ลองรัน container กันดูครับ แต่ด้วยตอนนี้เราลงใน env windows เพราะฉะนั้น ตัว images ที่เราจะใช้ได้ก็จะต้องเป็นตัวที่ใช้ได้กับ windows ผมเลยจะลองเป็นตัว .NET ดูแล้วกันครับ

docker run --rm mcr.microsoft.com/dotnet/samples docker run -it --rm -p 8000:8080 --name aspnetcore_sample mcr.microsoft.com/dotnet/samples:aspnetapp docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022 ถ้าทุกอย่างผ่านหมดเป็นอันว่าโอเค ตรงนี้ผมจะไม่สอนการใช้ docker นะครับ คิดว่าคนที่เข้ามาอ่านน่าจะใช้ได้ในระดับนึงอยู่แล้ว

ขั้นตอนที่ 4 : รัน Linux Containers

อย่างที่บอกไปครับ ส่วนใหญ่ images ต่าง ๆ ที่รันกับ docker ก็จะ compatible กับ linux ซะเป็นส่วนใหญ่ เพราะงั้นเราจะมาทำ linux container เพื่อไว้รัน images กัน สิ่งนี้จะเรียกว่า LCOW (Linux containers on Windows) ผมจะแปะ ref ไว้เผื่อใครสนใจอยากจะอ่านนะครับ
ref :https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers

โอเคขั้นแรกเราต้องเปิด Hyper-V ของเครื่อง server ก่อนเลย

Get-VM WinContainerHost | Set-VMProcessor -ExposeVirtualizationExtensions $true เปิดใช้ LinuxKit system เพื่อรัน Linux containers

[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine") หลังจากนั้น restart Docker Service

Restart-Service docker เปิดใช้งาน Experimental Features ใน Docker daemon

$configfile = @”

{

“experimental”: true

}

“@

$configfile|Out-File -FilePath C:\ProgramData\docker\config\daemon.json -Encoding ascii -Force

เนื่องจาก Linux Containers ต้องการเคอร์เนล Linux เราจึงต้องปรับใช้ 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." ลอง pull images มา test กันครับ

docker run --name test -it debian ประมาณนี้ครับ ง่าย ๆ ไม่ยาก แต่ผมทำเป็นวันเลย 55555

Tips : หากเราอยากจะสลับไปใช้ windows env เหมือนเดิมก็รันคำสั่งนี้ได้เลยครับ

[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "$null", "Machine") เพียงเท่านี้เราก็จะใช้ docker บน windows server ได้แล้วครับ ขอให้เพลิดเพลินครับ ส่วนผมขออุญาตกลับไปหา linux ที่รักก่อนละครับ ฮาๆๆๆ หากมี error หรือติดอะไรลองคอมเม้นไว้ได้นะครับ ผมเองก็ได้ได้เชี่ยวชาญมากมายแต่จะลองช่วยหาคำตอบดูครับ ขอบคุณครับบบ

© 2026 Nanpipat Klinpratoom. All Rights Reserved.