# WSL

## 🤠 รู้ป่ะ ?

โดยปรกติโปรแกรมต่างๆนั้นจะมีต้นกำเนิดมาจาก **Linux OS** ซะส่วนใหญ่ไม่ว่าจะเป็น [MongoDB](https://www.mongodb.com/), [Nginx](https://www.nginx.com/), [Redis](https://redis.io/), [Anaconda ](https://www.anaconda.com/)บลาๆ แล้วพอเวลาผ่านไปมีคนใช้เยอะขึ้นจนดังเป็นพลุแตก แน่นอนว่าขาเดฟในฝั่ง Windows ก็เป็นกลุ่มตลาดใหญ่เช่นกัน ดังนั้นเขาก็จะทำการแปลงโปรแกรมเหล่านั้นให้ฝั่ง **Windows OS** ใช้งานได้ แต่ด้วยชาติกำเนิดของมันที่ถูกสร้างและ Optimize มาจาก Linux ทำให้บางเรื่องก็ยังไม่สามารถดึงประสิทธิภาพออกมาได้เต็ม 100% และความสามารถบางอย่างก็ยังใช้งานได้แค่ฝั่ง Linux เท่านั้น เพราะความสามารถบางตัวไม่มีบน Windows หรือยังแปลงมาไม่เสร็จ

![](/files/-MLPsloAc-zl_KTBQJTb)

## 🤯 WSL

จากที่เล่ามาทาง Microsoft ก็รู้จุดอ่อนนี้เหมือนกันเลยทำให้เกิดไอเดียว่า **จะดีกว่าไหมถ้า Windows ทำงานร่วมกับ Linux ได้เป็นหนึ่งเดียวกันเลย?** ดังนั้นเลยเกิดโปรเจคที่ชื่อว่า **Windows Subsystem for Linux** หรือ **WSL** เกิดขึ้น ซึ่งมันจะทำให้**เราสามารถใช้งาน Linux บน Windows ได้แบบ Native** โดยที่ไม่ต้องลง Virtual Machine หรือ Hyper-V ใดๆเลย 😘

![](/files/-MLPwCBJ1YvSwWOPRC2V)

ดังนั้นถ้าเราใช้ WSL มันจะทำให้เครื่องของเราใช้ Linux ได้แบบ Native แถมยังเลือกใช้ Linux ได้หลายตัวพร้อมๆกันด้วย ตามรูปด้านล่าง

![](/files/-MLPy0J9zazJRjRgfNPZ)

![](/files/-MLPxML-rNXarOmvuhAl)

แถมยังแชร์ไฟล์/ไดรฟ์ ได้แบบเป็นหนึ่งเดียวกัน ไม่ต้องคอยแปลง format หรือจัดการเรื่อง network อะไรด้วย

![](/files/-MLVryBLC9IcWURH9JKx)

![](/files/-MLVr-ZU9Iq252z52IAk)

และความแจ่มแมวอีกอย่างคือ เราสามารถใช้ WSL ควบคู่กับ 🐳 **Docker** ได้ด้วยนะจ๊ะ

![](/files/-MLW8o0YCehI1jg053Ks)

## 🛠️ Installation

ถ้าใครอ่านมาถึงตรงนี้ **ดชแมวน้ำ** ก็น่าจะขายของได้แล้วล่ะ ดังนั้นมาเตรียมติดตั้ง WSL กันดีกั่ว ตามขั้นตอนพวกนี้

### 🔥 Requirements

อย่างแรกเลยคือตัว Windows ของเราจะต้องเป็นเวอร์ชั่นที่รองรับก่อนตามตารางด้านล่าง

| System | Version                                   |
| ------ | ----------------------------------------- |
| x64    | ขั้นต่ำ  **Version 1903** **Build 18362** |
| ARM64  | ขั้นต่ำ  **Version 2004** **Build 19041** |

ส่วนวิธีตรวจว่าเครื่องตัวเองรองรับหรือเปล่าให้กดปุ่ม **Windows** แล้วพิมพ์คำว่า **`winver`** แล้วกด enter ก็จะเจอเวอร์ชั่นของเครื่องเรา แล้วก็เอามาเช็คกับตารางตัวนี้เอาครับ ส่วนเครื่องใครยังไม่ใช่เวอร์ชั่นที่รองรับก็รบกวนกดที่ลิงค์นี้  [**Update Windows version**](ms-settings:windowsupdate) เพื่อไปทำการอัพเกรดเป็นตัวล่าสุดก่อนละกัน

### 🔥 Enable WSL

ต่อมาก็จะเปิดให้เครื่องเราสามารถใช้ WSL ได้ โดยการเปิด **`PowerShell`** ขึ้นมาในโหมด admin ซึ่งสามารถทำได้โดยกดปุ่ม Windows แล้วพิมพ์ว่า `powershell` แล้วเราจะเห็นโปรแกรม PowerShell โชว์ขึ้นมา ให้ทำการคลิกขวาแล้วเลือกเป็น `Run as administrator` แล้วตอบ yes ได้เบย&#x20;

![](/files/-MLVwo7mJ8Nj94tnj0Ag)

พอหน้าจอดำๆเปิดขึ้นมาละก็ copy คำสั่งด้านล่างลงไป แล้วกด enter โลด

```bash
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

ถัดมาก็ทำการเปิด Virtual Machine feature โดยการใช้คำสั่งด้านล่าง

```bash
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

ถึงตรงนี้ หากเครื่องใครใช้ WSL เวอร์ชั่น 1 อยู่ อาจจะต้อง Restart เครื่องซักรอบนึงนะ ส่วนใครอยากจะย้ำให้มั่นใจก็ restart ด้วยกะได้

### 🔥 Install Linux kernel

ถัดมาเราก็จะติดตั้ง **Linux kernel** ให้กับเครื่องเรา โดยการดาวโหลดไฟล์ด้านล่างมาติดตั้งให้เรียบร้อย (เลือกติดตั้งแค่ตัวเดียวนะขึ้นอยู่กับว่าเครื่องเราเป็น x64 หรือ ARM)&#x20;

> ตอนติดตั้งมันกดแค่ 2-3 ทีก็ติดตั้งเสร็จละ ไวมากไม่ต้องตกใจนะ 😂

* [**x64 system Linux kernel**](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
* [**ARM64 system Linux kernel**](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi)

{% hint style="warning" %}
**หมายเหตุ**\
สำหรับใครที่ไม่รู้ว่าเครื่องตัวเองเป็น x64 หรือ ARM64 สามารถตรวจง่ายๆโดยใช้คำสั่งด้านล่างนี้ครับ

```
systeminfo | find "System Type"
```

{% endhint %}

{% hint style="warning" %}
**หมายเหตุ**\
สำหรับคนที่เคยติดตั้ง WSL เวอร์ชั่นเก่าแล้วอยากเปลี่ยนมาใช้เวอร์ชั่นล่าสุด (ณ ตอนที่เขียนบทความนี้คือเวอร์ชั่น 2) ก็สามารถทำได้ง่ายๆโดยใช้คำสั่งด้านล่างนี้ครัช

```
wsl --set-default-version 2
```

{% endhint %}

### 🔥 Install Linux distribution

จากตรงนี้เครื่องเราก็จะพร้อมทำงานทุกอย่างละ สุดท้ายเราก็ต้องเลือกว่าจะใช้ Linux ตัวไหนบ้าง โดยเพื่อนๆสามารถเลือกได้จากลิสค์ด้านล่างนี้เลยกั๊ฟ

* [Ubuntu 16.04 LTS](https://www.microsoft.com/store/apps/9pjn388hp8c9)
* [Ubuntu 18.04 LTS](https://www.microsoft.com/store/apps/9N9TNGVNDL3Q)
* [Ubuntu 20.04 LTS](https://www.microsoft.com/store/apps/9n6svws3rx71)
* [openSUSE Leap 15.1](https://www.microsoft.com/store/apps/9NJFZK00FGKV)
* [SUSE Linux Enterprise Server 12 SP5](https://www.microsoft.com/store/apps/9MZ3D1TRP8T1)
* [SUSE Linux Enterprise Server 15 SP1](https://www.microsoft.com/store/apps/9PN498VPMF3Z)
* [Kali Linux](https://www.microsoft.com/store/apps/9PKR34TNCV07)
* [Debian GNU/Linux](https://www.microsoft.com/store/apps/9MSVKQC78PK6)
* [Fedora Remix for WSL](https://www.microsoft.com/store/apps/9n6gdm4k2hnc)
* [Pengwin](https://www.microsoft.com/store/apps/9NV1GV1PXZ6P)
* [Pengwin Enterprise](https://www.microsoft.com/store/apps/9N8LP0X93VCP)
* [Alpine WSL](https://www.microsoft.com/store/apps/9p804crf0395)

### 🔥 Set up a new distribution

หลังจากที่ติดตั้ง Linux distribution เสร็จแล้ว โดยปรกติ Linux OS นั้นเราจะต้องเข้าไปตั้ง Username & Password ต่างๆก่อนถึงจะเข้าไปใช้งานได้ (จริงๆ Mac, Windows ก็มีเรื่องพวกนี้เหมือนกัน แต่ส่วนใหญ่เราจะทำผ่าน GUI อยู่แล้วเลยไม่รู้ตัว) ดังนั้นให้เปิด Linux ที่เราพึ่งติดตั้งขึ้นมา แล้วตั้ง username & password โลด (สำหรับคนไม่เคยใช้ Linux ตอนใส่รหัสผ่านมันจะไม่แสดงสิ่งที่เราพิมพ์นะ ให้ใส่ให้ครบแล้วกด enter ได้เลย)

![ใครลงไรก็เปิดอันนั้นขึ้นมา ส่วนป๋มลง Ubuntu กับ Debian](/files/-MLW3X4x6ILvq1PuzKlK)

หลังจากที่สร้าง user เสร็จแล้ว สุดท้ายก็ทำการอัพเกรด packages กันหน่อยด้วยคำสั่งด้านล่าง

```bash
sudo apt update && sudo apt upgrade
```

จากทั้งหมดที่ทำมาก็เป็นอันว่าเครื่องคอมของเรา มี Windows และ Linux ทำงานอยู่บนเครื่องเดียวกันเรียบร้อยแล้วขอรับ ฮูเร่!! 🎉

### 🔥 Install Windows Terminal

ตัวนี้ไม่จำเป็นต้องลงก็ได้ แต่ส่วนตัวแมวน้ำชอบ เพราะมันทำให้เราเปิดหลายๆ Terminal ขึ้นมาได้พร้อมๆกัน แถมยังจัดการตกแต่งสีอะไรต่างๆได้ด้วย ทำให้เราไม่ต้องสลับจอไปๆมาๆเลย ซึ่งเพื่อนๆสามารถไปดาวโหลดมาติดตั้งได้จากลิงค์นี้ครัช [Microsoft Store](https://aka.ms/terminal)

![](/files/-MLW4d0ghJTkDKXOYo5w)

ซึ่งหลังจากติดตั้งเสร็จแล้ว เราก็ลองเปิดขึ้นมาเล่นดูก็จะพบว่า เราสามารถเลือกที่จะเปิด Terminal มาได้ทุกรูปแบบ Command Prompt, PowerShell, CloudShell, Linux ต่างๆที่เราติดตั้งไว้ได้หมดเลย ส่วนใครที่อยากจะตกแต่งลูกเล่นเพิ่มเติมต่างๆก็สามารถกด `Setting` ไปเล่นต่อได้ โดยสามารถศึกษาได้จากลิงค์นี้กั๊ฟ [**Windows Terminal**](https://docs.microsoft.com/en-us/windows/terminal/)

![](/files/-MLW5zr_se5l4qolWo0u)

![https://docs.microsoft.com/en-us/windows/terminal/panes](/files/-MLW7NbxgnF-6UmSIdSM)

## 🐳 Docker

สำหรับขาเดฟที่ชื่นชอบพี่วาฬก็สามารถนำ WSL มาทำงานร่วมได้เช่นกัน โดยการคลิกขวาที่ไอคอนพี่วาฬแล้วเลือก Settings > General แล้วติ๊กเลือกว่าจะทำงานกับ WSL ได้เบย

![](/files/-MLW9RQ0JNiVweVGn9BE)

ถัดมาเราก็จะมาตั้งค่าว่าจะให้ Linux ตัวไหนที่ใช้งาน Docker ได้บ้าง ตามรูปด้านล่าง

![](/files/-MLW9qrqHMW4c8_ZJP3g)

หลังจากที่กดตกลงเรียบร้อย + รีสตาร์ท Docker เรียบร้อย เจ้า Linux ของเราก็จะสามารถใช้งาน docker command ได้แบ้ว แถมยังไม่ต้องใช้ Hyper-V ในการสร้าง Linux VM อีกด้วย นั่นหมายความว่าเครื่องของเรากับ Linux ทำงานแบบแชร์ Resource พวก CPU, Memory, Storage กันได้อย่างแท้จริง ไม่ต้อง dedicate ของเหล่านั้นอีกแล้ว **แปลเป็นภาษามนุษย์ง่ายๆว่า เครื่องไม่อืดนั่นเอง 😂**

![](/files/-MLWAUuVwdhXvklgp4Eq)

สำหรับเพื่อนๆที่ต้องการศึกษาการใช้ WSL ควบคู่กับ Docker ก็สามารถไปอ่านต่อได้จากเอกสารหลักของ Docker ได้เลยนะกั๊ฟ [**Docker Desktop WSL 2 backend**](https://docs.docker.com/docker-for-windows/wsl/) ซึ่งแทบจะเรียกว่ามันเป็น Best Practices ของเขาในการใช้งานของ Windows เลยก็ว่าได้ 😘


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.saladpuk.com/basic/docker-1/wsl.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
