สำหรับ Blog นี้จะมาแปลกหน่อย จากเดิมปกติจะเป็นสรุป วันนี้มาในอีกมุม เป็นมุมว่าตัวเองไปยืนข้างหน้าชั้น อารมณ์แบบนำเสนอรายงาน แล้วออกมาสอนคนอื่นๆบ้าง ที่ลองมาสอน เพราะตัวเราเองได้เข้าไปฟัง / ลอง Workshop ที่ทาง Zabbix In Thailand จัดหลายรอบๆ เลยอยากจะลองเข้ามาร่วมแบ่งปันบ้าง โดยเรื่องที่จะสอน Docker ครับ ส่วนตัวมองว่ามันเป็นก้าวแรกในการขยับไปเรื่องอื่นๆ ได้
เตรียมตัว
ตอนแรก ผมวางเนื้อหาไว้ประมาณนี้นะ
- Why Container?
- Docker Architecture and Components
- Basic Docker Command
- ลองขึ้น Container บางตัว ใช้งานจริงอย่าง Nginx / WordPress / MySQL / Postgres คิดว่าน่าพอแล้ว และใส่โจทย์ในด้านต่างๆไปครับ
ตอนทำเราไม่ได้ดูว่าที่ชาวบ้านเค้าสอน เค้าสอนอะไรบ้าง ส่วนตัวเรียนรู้ Container จากการจำมา ปะติดปะต่อกันมากกว่า และตอนสุดท้ายเราก็จะได้หัวข้อประมาณนี้
- Why Container ?
- เล่าแต่ละยุคของการ Deploy ระบบ จาก Physical > VM > Container เรียกว่าพยายามใช้ Resource ให้คุ้มสุด และเน้นเล็ก ทำงานได้เร็ว และ Scale ง่ายขึ้น - What is a Container ?
- Docker Architecture and Components
รูปแบบการทำงานของ Docker จะเป็นตัว Client-Server โดยมีส่วนประกอบที่สำคัญ ดังนี้
- docker Client (docker cli) - program ที่ให้ผู้ใช้ป้อน docker command เพื่อจัดการ Docker Deamon
- Docker Host (เครื่องที่ลง docker)
- Docker Deamon (dockerd) - เป็น Process ที่จัดการ Request มาจาก docker cli เช่น
1. ดึง Image จาก Container Registry ถ้าไม่มี
2. สั่งให้ Image ทำงานเป็น Container เป็นต้น
- Image - พื้นที่ Local ที่เก็บ Image
Note: Image Software Package ที่รวม OS / Runtime / App ที่เบากว่า VM
- Container - Image ที่ถูกใช้งานแล้ว - Container Registry - ที่เก็บ Image / Plugins / Extensions ส่วนกลาง ที่มาแชร์ใช้งานร่วมกัน ปกติจะเป็น hub.docker.com
- พวก Image / Plugins / Extensions Explore Docker's Container Image Repository | Docker Hub
- Magic of Container, Why Linux ?
- บอกก่อน ว่าทำไม Container มันต้องเป็น Linux
- ส่วน Windows Container แนะนำให้หนีไปครับ
- Basic Docker Command
- พวก Command พื้นฐานทั่วไป pull image / run image
- หรือ การหา Container Image จาก Docker Hub เราต้องดูจากอะไรบ้าง และแนะนำการใช้งาน docket scout - Container - Resource Monitoring & Limit
- อันนี้เพิ่มมาจากประสบการณ์ส่วนตัวเลย ถ้าไม่คุมมันจะทำทั้ง System พังไป
- Container - Networking ตัว docker มีหลายแบบเลย แต่ตัวผมเองไม่ได้ใช้หมด เลยวางแผนสอนแต่ bridge / host (linux) / none
- Container - Store Data สอนว่าข้อมูลใน container เราจะเก็บยังไง เอาออกมายังไง ทั้งแบบ Volume / Mount
- Building Container (Dockerfile)
- หัวนี้เป็นหัวข้อที่ยากสำหรับผมเลย พอกลุ่มไม่ใช่สาย Dev หมด Dev น้อยมากๆ ส่วนใหญ่สาย SI / Network Engineer การอธิบาย Build Code > Executable > Image ไปใช้
- ของผมเลยมองอีกมุมนึง เมื่อก่อนเราอยากได้VM DB ที่มี Spec 1 2 3 4.. คราวนี้ลองมาเป็น Container Image บ้าง
- อีกมุมการ Share Image ในการทำงานจริงๆ
- Container Best Practice ลองสรุปๆ จากที่ทำมาและกัน เพราะเคยพลาด 555 อย่าง เช่น ตัว Container ตัวมันเองต้องไม่ถือ Data ไว้ข้างใน ควร mount ออกมาข้างนอก เวลาสลับเปลี่ยนเวอร์ชัน จะได้เปลี่ยน image ได้เลย
- Docker Compose
- ตอนแรกกะไม่ได้ใส่ กลัวสอนแล้วไม่ทัน ติดปัญหาตอนทำ Hand-On แต่ส่วนใหญ่งานจริงใช้ docker compose มากกว่ามันสะดวกกว่าเอา Command มาผูกเป็น Shell เลยเพิ่มมาด้วย
- สอนเรื่อง ในเคสที่ Container B ต้องรอ Container A ทำวานให้เรียบร้อยก่อน โดยดูจาก depend on (ping ติด) / healthcheck
- และไม่ลืมในส่วนของ resource limit ด้วยครับ
- ถ้าจะ Scale ด้วยจะไปแนะนำตัว K8S ครับ
- Wrap Up
ในส่วนของ Tools เนื่องจากเริ่มต้นสอน ผมจะใช้ Tools Docker Desktop จะได้ดูผลจาก Command + GUI ของ Docker Desktop ไปคู่กันครับ
พวก Command ใช้วิธีแยกเตรียมไฟล์ไว้ให้แทน ซึ่งส่วนใหญ่น่าจะถูก แต่มีวางยาไปบ้าง 555 ตอนวันจริงนะ
สอนจริง 25-26 May 2024
วันจริงและ เนื่องจากเป็นคนสอน เลยไปเข้า และปรากฏว่าหลงอีกตึกครับ 555555 เลยเปิดเมล์อ้อสรุปมีการย้ายไปอีกตึกครับ มาเตรียมตัวกัน ระหว่างสอนวันแรกดีครับ มีพี่ที่ Community (พี่สมเกียรติ / พี่อุ้ม / พี่ลี) มาช่วยตอบคำถาม และ recap ที่ผมสอนด้วย ทำได้ปรับพื้นฐานกันได้ไวครับ และมีหัวข้อปรับ Slide เพิ่มนิดนึง เช่น
- Resource Limit ตอนแรก Run แบบกำหนด Property เฉยๆ เลยมีการ Proof จริงด้วย ว่าถ้ากำหนด Resource ตัว docker มันคุมได้จริงไหม (จริงๆมันผ่านตัว cgroup)
- Portainer มีแนะนำเบื้องต้นไปสำหรับคนที่ดู Docker หลายๆตัวครับ และมีเพิ่ม Docker Compose ของ Portainer
- การจัดเก็บ Log เป็นต้น
ตอนลองสอนจริง แบบตื่นเต้นด้วยอาจจะพูดเร็วไป และพูดข้ามไปในบ้างเรื่องครับ หรือ hand-on มีวางยานิดนึง เจ็บจะได้จำครับ เดี๋ยวรอบหน้า ผมจะลองมาจัดการเวลาให้ดีขึ้นครับผม จะได้แบ่งเวลาสอน มี hand-on แบบง่าย และเป็นส่วน Challenge ครับ แต่เรื่องวางยายังมีอยู่นะ ผิดเป็นครูครับ
สุดท้ายขอบคุณผู้เรียนทุกท่านด้วยนะครับ ที่สละเวลามาฟังครับผม
Resource ทั้งหมดที่ใช้ในการสอน
ผมเอาขึ้นไว้ใน Repository นี้ครับ pingkunga/train-docker-at-BSRU (github.com)
ถ้าใครชอบบทความสามารถ Subscribe Blog นี้ได้ครับ
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.