วิธีรัน Docker บน WSL ( Windows Subsystem for Linux )

WSL ( Windows Subsystem for Linux ) เป็น kernel Linux ที่พ่วงมากับ Windows 10 เป็นต้นไป ช่วยให้ลูกค้า Windows สามารถรันระบบ Linux ได้ บทความนี้แอดมินจะแนะนำวิธีใช้งาน WSL ตั้งแต่เบื้อต้น ไปจนถึงระดับรัน container ยอดนิยม เช่น Docker ได้เลย ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ

เตรียม WSL

เตรียม WSL

ติดตั้ง WSL

เริ่มด้วยการพิมพ์ในช่องค้นหาของ Windows ด้วยคำว่า

Turn Windows Features on or off

แล้ว click กดเปิดหน้าต่าง Windows Features ขึ้นมา

2024-04-02_13-35-28.jpg

ติ๊กถูกหน้า Windows Subsystem for Linux ( WSL )

แล้วกด OK

2024-04-02_13-37-19.jpg

หลังจากนั้น restart Windows 1 รอบ

เตรียม WSL

ติดตั้ง Windows Terminal

Command Prompt และ Windows Powershell ที่พ่วงมากับ Windows นั้นยังไม่เหมาะกับการใช้ WSL เท่าที่ควร

ดังนั้น Terminal ที่จะใช้ควบคุม WSL ได้ดีที่สุด ( ณ ปี 2024 ) คือ Windows Terminal

เราต้องเข้า Microsoft Store แล้วติดตั้ง Windows Terminal ( ดังภาพ )

2024-04-02_13-40-17.jpg

หลังจากติดตั้งแล้ว  เราจะได้โปรแกรม Windows Termial แบบนี้

2024-04-02_13-44-45.jpg

นับจากนี้เป็นต้นไป  เราจะใช้โปรแกรม Windows Terminal เป็นตัวหลักในการใช้คำสั่ง wsl.exe

เทคนิคเพิ่มเติม  เราสามารถปรับแต่ง Windows Terminal ได้โดยกด Settings ( ดังภาพ )

2024-04-02_16-08-39.jpg

เตรียม WSL

อัพเดท WSL ให้ใหม่เสมอ

เปิดโปรแกรม Windows Terminal แล้วพิมพ์คำสั่งดังนี้

ดูเวอร์ชั่น wsl ที่เราติดตั้ง

wsl -v

2024-04-02_13-48-37.jpg

ในภาพ WSL ของแอดจะเป็น WSL version 2.1.5.0 ล่าสุด ( ณ 04/2024 ) แล้ว

หาก WSL ยังเป็นเวอร์ชั่นเก่า ลูกค้าพิมพ์คำสั่งอัพเดท WSL ได้ดังนี้

wsl --update

2024-04-02_16-39-09.jpg

ลูกค้าก็จะได้ WSL ล่าสุดไว้ใช้งาน

เตรียม WSL

ติดตั้ง Linux ลง WSL

เลือกดูรายการ Linux distro ที่เราสามารถติดตั้งลง WSL ได้ด้วยคำสั่งนี้

wsl -l -o

2024-04-02_15-41-18.jpg

สมมติลูกค้าเลือกติดตั้ง Ubuntu-20.04 ก็พิมพ์คำสั่งนี้

wsl --install Ubuntu-20.04

2024-04-02_15-45-01.jpg

เริ่มใช้งาน Linux ( ที่เราติดตั้ง )

เปิดโปรแกรม Terminal ขึ้นมาแล้วกดปุ่ม + ด้านบน

2024-04-02_15-46-58.jpg

แล้วเลือก Linux distro ที่ลูกค้าต้องการ

2024-04-02_15-47-33.jpg

เริ่มใช้ bash ของ linux ได้ทันที

เตรียม WSL

กำหนดให้ WSL รันเวอร์ชั่น 2 เป็นค่าเริ่มต้น ( default )

หากลูกค้าติดตั้ง WSL ในช่วงแรกๆเมื่อ 1-2 ปีก่อน ( ณ ตอนนี้ 04/2024 ) ลูกค้าจะได้ WSL เวอร์ชั่น 1

ซึ่งปัจจุบัน Microsoft ได้ปล่อย WSL 2 มาแล้ว  ซึ่งจะมี feature หลากอย่างที่ดีขึ้นกว่า WSL 1 ( เช่น WSL 2 สามารถรัน systemd ได้ เป็นต้น )

จากตัวอย่างคำสั่งนี้  Linux ที่แอดติดตั้งใน WSL มีทั้งรัน WSL 1 และ WSL 2

2024-04-02_14-10-02.jpg

ดังนั้น  เราควรกำหนดให้ WSL รัน version 2 เป็นค่าเริ่มต้น ( deault ) เสมอ

โดยพิมพ์คำสั่งนี้

wsl --set-default-version 2

2024-04-02_14-05-42.jpg

คำสั่งด้านล่างนี้ แอดจะกำหนดให้ Debian รัน WSL 2

wsl --set-version Debian 2

2024-04-02_14-14-03.jpg

 

 

 

ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ

เตรียม systemd

เตรียม systemd

ติดตั้ง systemd บน Linux (WSL)

systemd คืออะไร แล้วสำคัญอย่างไร ?

- systemd คือ daemon ของ Linux ที่ทำงาน background หรือเปรียบเสมือนระบบ Services ของ Windows

- application ยอดนิยมที่รันบน Linux เช่น Apache , Nginx , MySQL , PostgreSQL , อื่นๆอีกมากมาย  ต้องทำงานบนผ่าน systemd

- ปกติ WSL จะไม่รองรับ systemd จนกระทั่ง Microsoft ประกาศว่า WSL ได้รองรับ systemd ตั้งแต่ version 2 เป็นต้นไป


3 ขั้นตอนการติดตั้ง systemd บน WSL  ดังนี้

1. systemd จะรันได้ WSL จะต้องเป็น version 2 ( Windows 22H2 ) เป็นต้นไป

2. ต้องตั้งค่าให้ systemd ทำงานเอง Auto ใน /etc/wsl.conf ( ทำครั้งเดียว )

3. ต้องรีสตาร์ท WSL ใหม่เพื่อให้ systemd เริ่มทำงาน ( systemd จะไม่รัน Auto ถ้า Windows restart , แต่ systemd จะรัน Auto ถ้า Linux เริ่มทำงาน )


1. วิธีอัพเดท WSL 2

ดูได้ที่ http://docs.limitrack.com/books/wsl-windows-subsystem-for-linux/page/wsl-IxF


2. ตั้งค่าให้ systemd ทำงานเอง Auto

สมมติลูกค้าต้องการให้ Ubuntu 22.04 รัน systemd เอง Auto

วิธีคือ เปิดโปรแกรม Windows Terminal แล้วเลือก Ubuntu 22.04

ใน bash shell ของ Ubuntu 22.04 ให้ลูกค้าพิมพ์คำสั่งดังนี้

sudo nano /etc/wsl.conf

2024-04-02_16-50-09.jpg

แล้วเพิ่ม 2 บรรทัดเข้าไป

[boot]
systemd=true

2024-04-02_16-51-22.jpg

แล้ว save & exit ( Ctrl+X แล้วกดปุ่ม Y )


3. ต้องรีสตาร์ท WSL ใหม่เพื่อให้ systemd เริ่มทำงาน

ในหน้าต่าง Windows Terminal ( หรือ Powershell ก็ได้ ) ให้พิมพ์คำสั่งนี้เพื่อหยุดการทำงาน WSL

wsl --shutdown

2024-04-02_16-56-11.jpg

จะพบว่า Linux ทุกตัวหยุดทำงานแล้ว

หลังจากนั้นให้ลูกค้าเปิด Linux ขึ้นมาใหม่   ก็จะพบว่า systemd เริ่มทำงาน Auto เองแล้ว ( ดังภาพ )

sudo systemctl list-units --type=service --state=running

2024-04-02_16-59-32.jpg

ลูกค้าสามารถรัน application ที่เป็น system daemon อย่างเช่น web server , file server , database server , อื่นๆ  ใน WSL ได้เลย

 

 

 

ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ

ติดตั้ง Docker บน WSL

ติดตั้ง Docker บน WSL

ติดตั้ง Docker บน WSL

ขั้นตอนรัน Docker บน WSL

1. ติดตั้ง WSL

2. เปิดการทำงาน systemd

3. ติดตั้ง Docker

4. เพิ่มกลุ่มผู้ใช้งานในกลุ่ม docker


1. ติดตั้ง WSL

ดูวิธีติดตั้ง WSL ที่ เตรียม WSL


2. เตรียม systemd

ดูวิธีติดตั้ง systemd ที่ ติดตั้ง systemd


3. ติดตั้ง Docker

ดูวิธีติดตั้ง Docker ที่ https://docs.docker.com/engine/install/ubuntu/


4. เพิ่มกลุ่มผู้ใช้งานในกลุ่ม docker

หลังจากติดตั้ง docker เสร็จแล้ว  เราจะยังรัน docker ไม่ขึ้น  โดยจะขึ้น error ดังนี้

2024-04-02_17-20-34.jpg

วิธีแก้คือ  รันคำสั่งนี้

sudo usermod -aG docker $USER

2024-04-02_17-22-15.jpg

ใช้งาน docker บน WSL ได้แล้ว

 

 

ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ

ตั้งค่าให้ WSL รัน background และ Auto Run

เราต้องทำให้ WSL ทำงานตลอดเวลา ( background ) และ systemd ทำงานเอง ( Auto Run ) เมื่อ Windows เริ่มต้นใหม่

ตั้งค่าให้ WSL รัน background และ Auto Run

เทคนิคพิเศษ ! ตั้งค่าให้ Linux รันตลอดเวลา ( bandground ) แม้จะปิดหน้าต่าง Linux Terminal

ปัญหาสำคัญในการรัน systemd บน WSL คือ  เมื่อลูกค้าปิดหน้าต่าง Linux Terminal แล้วซักพัก Linux ตัวนั้นก็จะหยุดทำงาน ( Stopped )

นั่นทำให้ systemd หยุดทำงานไปด้วย

ลูกค้าลองปิดหน้าต่าง Linux แล้วรอซักครู่นะพบว่า Linux หยุด Stopped เอง

2024-04-07_12-43-50.jpg


Trick พิเศษ !

แอดมินค้นหาวิธีแก้ไม่ให้ Linux ( WSL ) หยุดการทำงาน ( Stopped ) เอง  ได้โดยใช้เทคนิคการสั่งรัน tmux ค้างไว้ ดังนี้

เปิดหน้าต่าง Linux ที่ลูกค้าใช้งานขึ้นมาซักตัว

1. ติดตั้ง tmux ก่อน โดยพิมพ์คำสั่งนี้

$ sudo apt install tmux

2. สร้าง tmux ไว้ 1 session ( เพื่อให้ tmux ทำงาน background ) โดยพิมพ์คำสั่งนี้

$ nano ~/.bashrc

แล้วพิมพ์ 3 บรรทัดนี้ต่อท้ายล่างสุดของไฟล์ .bashrc

if ! tmux ls > /dev/null 2>&1; then
        tmux new -d > /dev/null 2>&1
fi

2024-04-07_14-25-20.jpg

แล้วกดปุ่ม Ctrl+X และ Y และ Enter เพื่อ save ไฟล์

3. เปิดหน้าต่าง Linux เพิ่มขึ้นมาใหม่  แล้วพิมพ์ดูว่า tmux ถูกสร้าง session ไว้แล้วยัง

$ tmux ls

2024-04-07_14-29-53.jpg

จะพบว่า tmux ถูกสร้างให้รัน background อย่างน้อย 1 session ทุกครั้งที่เราเปิดรัน Linux

วิธีนี้จะช่วยให้ Linux ไม่หยุดทำงาน ( Stopped ) เมื่อเราปิดหน้าต่าง Linux Terminal

4. ลูกค้าลองปิดหน้าต่าง Linux Terminal แล้วรอซักพัก  แล้วพิมพ์คำสั่งนี้ใน Windowns Terminal

2024-04-07_14-32-13.jpg

ก็จะพบว่า Linux จะ Running ตลอดไป  แม้เราจะปิดหน้าต่าง Linux Terminal แล้วก็ตาม

นั่นคือ application & service ทุกๆตัวที่รันบน systemd ก็จะทำงาน background ตลอดไปด้วยเช่นกัน

 

 

 

ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ

ตั้งค่าให้ WSL รัน background และ Auto Run

เทคนิคพิเศษ ! ตั้งค่าให้ wsl รันเองอัตโนมัติ ( auto start ) เมื่อ Windows เริ่มต้นใหม่


[ ก่อนจะทำตามหน้านี้ ]

ลูกค้าต้องทำขั้นตอนนี้ก่อน > เทคนิคพิเศษ ! ตั้งค่าให้ Linux รันตลอดเวลา ( bandground ) แม้จะปิดหน้าต่าง Linux Terminal


ตั้งค่าให้ wsl รันเองอัตโนมัติ ( auto start ) เมื่อ Windows เริ่มต้นใหม่

หากเราต้องการให้ systemd ( ใน WSL ) รันพร้อมๆกันกับ Windows ก็ทำได้เช่นกัน  โดยสร้าง Task Schedule เพื่อให้รัน Linux ตอนที่ Windows เริ่มใหม่ ดังนี้

1. เปิดโปรแกรม Task Schedule

2024-04-07_12-50-08.jpg

2. กด Create Task เพื่อสร้าง Job ใหม่

2024-04-07_15-22-39.jpg

3. แถบ General ทำตามภาพนี้

2024-04-07_15-24-14.jpg

4. แถบ Triggers กดปุ่ม New

2024-04-07_15-28-05.jpg

5. แถบ Action กดปุ่ม New แล้วพิมพ์คำสั่งรัน Linux distro ที่ต้องการนี้ลงไป

C:\Windows\system32\wsl.exe -d Ubuntu-22.04

ต้องแยกระหว่าง wsl.exe และ -d Ubuntu-22.04 ไว้คนละช่อง ดังภาพ

2024-04-07_15-29-44.jpg

6. หน้า Conditions เอาติ๊กถูกออกให้หมด

2024-04-07_15-31-08.jpg

7. หน้า Settings ตั้งค่าตามภาพนี้

2024-04-07_15-32-36.jpg

แล้วกดปุ่ม OK

8. หลังจากลูกค้า restart Windows  เมื่อเข้า Windows มาใหม่แล้วจะพบว่า Linux Ubuntu-22.04 รันเอง Auto แล้ว

2024-04-07_12-45-59.jpg

และ application & service ที่เรารันใน systemd ก็จะทำงานด้วยเช่นกัน

 

 

ฝากสนับสนุนบริการ www.Limitrack.com เพื่อให้พวกเราได้นำสิ่งดีๆมามอบให้ลูกค้าครับ