มาลองสอน Docker ครั้งแรก @BSRU

สำหรับ 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
สำหรับ Podman เดี๋ยว ผมมี Blog มาเขียนวิธีการเพิ่มเข้าไปนะครับ
  • การจัดเก็บ 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.