สรุปการไปแบ่งบันเรื่อง Docker ที่ มอ. ภูเก็ต

เมื่อวันเสาร์ที่ 18 มีนาคม 2560 ผมมีโอกาสได้รับเชิญไปพูดคุย แนะนำในเรื่องของ Docker ขั้นพื้นฐาน เพื่อที่จะสามารถนำไปต่อยอดในการนำไปเป็นส่วนหนึ่งของการพัฒนาซอฟแวร์ของตัวเองได้

โดยเป้าหมายที่ผมตั้งไว้ ผมอยากให้น้องๆได้ใช้ลองงาน Component ต่างๆของ Docker ได้ครบทุกตัว เพื่อให้เข้าใจว่า แต่ละ Component ของ Docker นั้นเอาไว้ทำอะไร มีประโยชน์อะไรบ้าง

เตรียมตัว

จริงๆผมเตรียม VM ไว้ให้น้องๆเรียบร้อยแล้ว ในนั้นติตตั้ง Docker และ Component ที่จำเป็นต่อการใช้งาน Docker เอาไว้ให้แล้ว ขนาดรวมประมาณ 20 GB (ใหญ่เอาเรื่องเหมือนกัน) ประกอบไปด้วย

  • VM Windows 7 + Docker Toolbox (ลองเล่น Docker Machine, Docker Swarm)
  • VM Windows 10 + Docker for Windows (ลองเล่นคำสั่งพื้นฐานของ Docker + Docker Compose)

ที่ผมทำเป็น VM เอาไว้ให้ เพื่อจะลดปัญหาในเรื่องของ Dependencies ต่างๆ และ Environment ของเครื่องที่แตกต่างกัน และลดเวลาในการติดตั้ง Docker ลง (บทเรียนจากการสอน CodeIgniter คราวที่แล้ว กว่าจะติดตั้ง Docker ได้ ปาเข้าไปครึ่งวัน)

เริ่มเตรียมการอบรมจริง

แน่นอนครับ ปัญหาบางอย่าง เป็นไปตามที่ผมคิดจริงๆ เครื่องในห้อง Lab นั้น ยังใช้งาน Windows 7 อยู่ และได้ติดตั้ง VMWare เอาไว้เรียบร้อยแล้ว (อันนี้ผมแจ้งไปก่อนแล้ว ให้เจ้าหน้าที่ IT ติดตั้งเอาไว้ให้) ผมก็โอเคแหละ เป็นไปตามที่คิด และสิ่งที่เหนือควมคาดหมายของผม ก็เกิดขึ้น (ขออภัยในความไม่รอบคอบของผมเอง ขออภัยด้วยครับ)

  • เนื่องจากที่คณะ กำลัง Renovate อาคารใหม่ ทำให้ WiFi ของมหาวิทยาลัยภายในคณะนั้น หาใช้งานยากมาก โชคดีที่พี่ IT ของคณะ เข้ามาตรวจสอบความเรียบร้อยพอดี เลยขอ Access Point เฉพาะกิจไป (ขอขอบคุณพี่ธนมา ณ ที่นี่ด้วยครับ) เรื่องก็ผ่านไปด้วยดี
  • Network ของห้อง Lab เป็น Fast Ethernet (100 Mb/s) การส่งไฟล์ 20 GB บน Fast Ethernet กระจายไปประมาณ 30-40 เครื่อง ไม่ใช่เรื่องเล่นๆ มันใช้เวลานานมาก อาจจะกินเวลาไปเป็นวันเลยทีเดียว
  • มีน้องๆบางส่วน (ส่วนมากซะด้วย) นำ Computer มาเอง ติดตั้งระบบปฏิบัติการแตกต่างกัน มีบางเครื่องที่ RAM ไม่ถึง 8 GB พอนำ Docker for Windows ไปลง ทำให้ Start Docker Engine ไม่ขึ้น แก้ปัญหาด้วยการลด Memory ของ Hyper-V ลง ก็ผ่านไปด้วยดีครับ
  • คอมพิวเตอร์ห้อง Lab มีปัญหาการตีกันของซอฟแวร์ ทำให้ Start ตัว boot2docker ที่อยู่ใน VBox ได้ แต่ Docker Terminal มองไม่เห็น

ผมแก้ปัญหาด้วยการให้น้องๆ ที่เอาคอมพิวเตอร์มาเอง ติดตั้ง Docker Toolbox (เครื่องที่เป็น Windows 7, 8, 8.1) Docker for Windows (เครื่องที่เป็น Windows 10) สำหรับคนที่ใช้คอมพิวเตอร์ห้อง Lab ก็จำเป็นต้องไปเอาคอมพิวเตอร์ตัวเองมาใช้งาน

สิ่งที่ได้แบ่งปันไป

เนื่องจากติดปัญหาเรื่องคอมพิวเตอร์ เราเลยต้องเปลี่ยนแผนเรื่องเวลาไปเยอะพอสมควร แต่เราก็เริ่มเรียนกันได้ในที่สุด

ช่วงเช้า

จะเน้นในเรื่องของทฤษฎีเป็นหลัก แล้วก็มีตัวอย่างการใช้ Command เบื้องต้นในช่วงท้ายนิดหน่อย

  • มาทำความรู้จัก Docker
  • มาทำความรู้จัก Container
  • ยกตัวอย่างความเจ็บปวดต่างๆ ที่ Docker สามารถแก้ปัญหาได้
  • มาทำความเข้าใจกับ Solution ของ Docker
  • มารู้จักองค์ประกอบสำคัญต่างๆ ของ Docker (Container,Image,Registry)
  • มารู้จัก Workflow พื้นฐานในการใช้งาน Docker
  • ทำความรู้จัก Docker Network
  • ทำความรู้จัก Docker Volume
  • มารู้จักกับ Command ของ Docker นิดหน่อย

ช่วงบ่าย

เนื่องจากช่วงบ่าย น้องๆหลายคนนั้นนำคอมพิวเตอร์ของตัวเองมาแล้ว เราจึงสามารถทดลอง Command ต่างๆได้เต็มที่

  • ทบทวน Command ที่ใช้งานในช่วงเช้า พร้อมทดลองทำ
  • ทดลองทำ Workshop ต่างๆที่เตรียมเอาไว้ให้ เพื่อฝึกการใช้งาน
  • ทดลองใช้คำสั่งจัดการ Volume และการ Mapping port ออกมาจาก Container พร้อมทำ Workshop เพื่อฝึกการใช้งาน
  • สอนการใช้ Docker Compose พร้อม Demo

เนื่องจากเวลาไม่ทันจริงๆ ผมเลยให้น้องๆ เลือก Component ที่อยากรู้มา 1 ตัว ผมจะแนะนำและทดลองให้ดู น้องเลือก Docker Compose ครับ ผมเลยยกตัวอย่างการจัด Stack ในการทำ Website ด้วย PHP + Mysql ให้ดูด้วย Docker Compose


ผมต้องยอมรับว่า มันเกิดเหตุที่ไม่คาดฝันเยอะมาก ทำให้เราไม่สามารถสอนเนื้อหาได้ทั้งหมด แต่สิ่งที่ผมเน้นในการเรียนครั้งนี้คือ การแก้ปัญหา การค้นคว้า การทดลอง เพราะถ้าไม่ทดลองแก้ดู ไม่ลองทำดู เราก็ไม่มีทางรู้ว่าปัญหามันเกิดจากอะไร แก้ด้วยวิธีอะไร

เด็กๆที่มาเรียน สามารถเรียนรู้ได้เร็วครับ และชอบการทำ Workshop มากกว่านั่งเรียนทฤษฎีอย่างเห็นได้ชัด พอได้ทำ Workshop ซ้ำๆไปเรื่อยๆ ก็เริ่มจับจุดได้ สามารถทำได้ดีครับ แต่เสียดายที่เวลาเราน้อยไปหน่อย + ปัญหาทางเทคนิค

เนื่องจากเป็นการสอนอย่างเป็นทางการของผมครั้งแรก แน่นอนว่ามันมีความผิดพลาดแน่นอน อาจจะมีส่วนที่ผมสอนไม่เข้าใจ ขาดตกบกพร่องไป ผมต้องขออภัยด้วยครับ

งานนี้ต้องขอขอบคุณอาจารย์จามิกรมากๆครับ ที่ให้โอกาสผม แล้วก็น้องซันนี่,กระป๋อง ที่เดินเรื่องและเป็นธุระจัดการเรื่องต่างๆให้ และผู้เข้าร่วมทุกคนครับ (ผู้เข้าร่วมครั้งนี้ มีน้องๆ สาขา Software Engineer ปี 4, อาจารย์, น้องๆจากภาควิชาวิศวกรรมคอมพิวเตอร์, พี่และเพื่อนนักศึกษาปริญญาโท MSIT)

Slide ที่ใช้ในการสอน

http://www.slideshare.net/AzerdarTKusumoto/basic-docker-for-developer

Repository เก็บ Workshop ที่ใช้ในการสอน

https://github.com/Kusumoto/psu-docker-workshop-resource