Container 101 : เตรียมความพร้อมก่อนไปงาน DevOps BKK 2018

Manassarn Manoonchai
Eventpop
Published in
3 min readSep 6, 2018

ในวันเสาร์ที่ 8 กันยายนนี้ จะมีงาน DevOps BKK 2018 ซึ่งนับว่าเป็นงานใหญ่งานแรกของวงการ DevOps ในไทยเลยก็ว่าได้ โดยงานนี้เกิดขึ้นจากการร่วมมือกันของหลายๆ บริษัทที่พัฒนาโปรดักต์แล้วมีความรู้ทางด้าน DevOps รวมถึงเหล่า Speaker คุณภาพ มาร่วมกันแชร์เรื่องราวและประสบการณ์ต่างๆ เกี่ยวกับ DevOps ครับ

งาน DevOps BKK จะจัดขึ้นที่ BITEC Grand Hall ห้อง GH 203 ไบเทคบางนาครับ ถ้าสนใจซื้อบัตรยังสามารถกดได้ที่นี่ครับ https://www.eventpop.me/e/3928-devops-bkk-2018 #ขายของ Update : บัตรหมดแล้ว! 😂

รายชื่อผู้สนับสนุนเยอะมาก แม้จะเป็นงานครั้งแรก 👏

โดยส่วนตัวแล้วรู้สึกตื่นเต้นกับงานนี้มาก ถึงแม้สกิล DevOps จะยังอยู่ในระดับ Padawan ยอมรับว่านี่เป็นงานแรกที่พอดูรายชื่อ Session แล้วถึงกับคิดว่า ถ้าไม่เตรียมตัวไปก่อนน่าจะงงกันแต่เช้ายันเย็นแน่นอน และคิดว่าอีกหลายๆ คนที่ไม่ได้ทำ DevOps เป็นหลักอาจเจอปัญหาเดียวกันได้ครับ 😂

Session คุณภาพคับแก้ว

พอดูจากชื่อ Session แต่ละห้องแล้ว จะพบว่าอย่างน้อยเกินครึ่งหนึ่ง พูดถึงเรื่อง Container (Docker & Kubernetes และ Tooling ต่างๆ นานา) ครับ! นี่เรียกงาน ContainerCon BKK ก็ได้นะ!

Container มาแรงนะโฮ่ง (image from doger.io)

จริงๆ แล้วจะมี Track ที่สอน Hands On เรื่อง Docker กับ k8s อยู่แหละ แต่ว่าใน Track อื่นก็น่าสนใจมากพอกัน เลยคิดว่าถ้าเตรียมตัวไปให้พร้อม น่าจะได้เข้าห้อง Advance ไปเลย

ซึ่งวิธีการเตรียมตัวของผมก็คือ จัด Internal Dev Workshop ภายในบริษัทซะเลยครับ ในหัวข้อ Container 101 แล้วก็ทำการบ้าน หาข้อมูลกันตรงนั้นแหละ ผลคือทุกคนสนใจมากเมื่อแจ้งไปว่าจะเลี้ยงพิซซ่าด้วย 🍕 🍕 🍕

Slide อย่างเกรียน

สิ่งที่จะนำมาแชร์ คือ Learning Path ที่ได้ Learn / Re-learn ในหนึ่งเดือนที่ทำการ Research มาครับ ถ้ามีอะไรผิดไปก็ขออภัยด้วย

1. Enter Container

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

การใช้ Container (จากนี้จะเหมารวมว่า Docker 🐳) สามารถทำให้ชีวิตเราง่ายขึ้นได้หลายประการมาก เช่น

  • เราสามารถติดตั้ง Tools หรือทดลองใช้ภาษาโปรแกรมได้ด้วยการ Pull image ของมันมาจาก Repository เช่น Docker Hub ได้เลย
  • เราจะนำ Docker image ที่คนอื่นทำไว้อยู่แล้วมาต่อยอด หรือ Package ตัวโค้ดของเราเข้าไปได้ ด้วยการทำ Dockerfile ได้ออกมาเป็น Docker image ใหม่ของเราเอง
  • การทำ Docker image นอกจากจะประหยัดเวลาในการ Build แล้ว จะยังทำให้การนำไปรันในแต่ละ Environment หรือ OS ต่างๆ มีความเหมือนกันเพราะว่าอยู่ใน Container ลดปัญหา “It works on my machine” ได้ดี เริ่มมี Platform หลายๆ เจ้าที่นำหลักการนื้มาใช้ คือทำการรัน Test suite ภายใน Docker เราจึงไม่ต้องห่วงเรื่อง Test environment เลยเพราะจะเหมือนกันทุกที่ ลดปัญหาการรันบนเครื่องผ่านแต่เฟลบน CI

ซึ่งใน Internal Workshop เราได้ทดลองการสร้าง Dockerfile เพื่อรัน Web server ง่ายๆ ขึ้นมา

Simple web server, with Ruby, of course 🧡

กอปรกับ Docker for Mac ที่ตอนนี้ติดตั้งง่ายมากๆ ไม่เหมือน boot2docker + Docker Machine เมื่อกาลก่อน ทำให้คนเริ่มต้นใช้ Docker ได้เร็วขึ้น ง่ายขึ้นเยอะ

2. Multiple containers

เมื่อทดลองใช้ Container เดียวแล้ว ตัวอย่างที่ดีในการทดลองรันหลายๆ Container พร้อมกัน คือ Database ที่จะมาต่อกับ Web server ของเรา​ ซึ่งตัว Docker Compose จะมาตอบโจทย์นี้ได้ โดยใช้คำสั่งเดียวเพื่อ Run หลาย Image พร้อมกันได้ แถมยังสร้าง Docker Network ให้สามารถคุยกันเองได้ด้วย

(https://medium.com/pintail-labs/docker-series-moving-past-one-container-bf32b45831d3)

การเขียนไฟล์ Compose ก็ไม่ยาก เป็นไฟล์ Yaml ธรรมดา กำหนดสเปคว่าเราจะใช้ Image ไหนบ้าง แล้วใช้คำสั่ง docker-compose up เป็นอันเสร็จ

3. Scaling containers

อันที่จริงแล้วเราจะ Scale ด้วยการใช้ Docker Compose ก็ได้เหมือนกัน
docker-compose up --scale your_service_name=5 สิ่งที่ได้ออกมาจะเป็นแค่ Container หน้าตาเหมือนกัน 5 ตัว และการจัดการควบคุมและ Monitor ต่างๆ จะทำได้ลำบากกว่า

จึงได้เวลาของพระเอกของเราออกโรง นั่นคือ Kubernetes (Docker Swarm คุณไม่ได้ไปต่อ 😿)

Kubernetes หรือ k8s

ถ้าจะให้อธิบายยืดยาวเดี๋ยวจะไม่เป็น 101 แล้ว สรุปสั้นๆ คือเป็น Tools ที่จะมาทำให้เราจัดการ Cluster ที่เป็น Container ได้ง่ายขึ้นมากๆ (เมื่อเซ็ตเสร็จ…) หากอยากลองเล่นก็ไปทดสอบกันบน Google Cloud ได้ มีเครดิตให้สำหรับคนใช้ครั้งแรกถึง $300 แน่ะ แต่ถ้าอยากลองบนเครื่องตัวเองก็มี Minikube ให้สามารถเซ็ต Local Cluster ได้

ข้อดีของ Kubernetes ที่เหนือกว่าการจัดการ Container ด้วยตัวเอง มีเยอะมาก เข้าไปอ่านการ์ตูน Kubernetes กันได้เลย เขียนไว้ได้ครบถ้วน และเข้าใจง่าย

มีขายของนิดหน่อย อิอิ (https://cloud.google.com/kubernetes-engine/kubernetes-comic/)

4. Cloud-Native

เรื่องของ Container นั่นแทบจะเป็นเรื่องที่พลิกวงการ Cloud Computing เลยทีเดียว นับว่าภายในไม่กี่ปี มี Project ที่เกี่ยวกับ Container ผุดขึ้นมามากมาย ซึ่งเป็นส่วนหนึ่งที่ทำให้เกิดคำว่า Cloud-Native Application ขึ้นมา

(https://medium.com/velotio-perspectives/cloud-native-applications-the-why-the-what-the-how-9b2d31897496)

และล่าสุดได้มีการรวมตัวกันเป็นองค์กรขึ้นมา ชื่อ Cloud Native Computing Foundation (CNCF) มีการสนับสนุน Open Source Project ต่างๆ ที่เกี่ยวกับ Cloud-Native หลายๆ Project มาก (Kubernetes ก็เป็นหนึ่งในนั้น) หากนึกภาพไม่ออก มันเหมือนกันกับ Apache Foundation ในภาค Cloud-Native นั่นเอง

https://www.cncf.io/

ซึ่งแต่ละ Project ก็จะมีส่วนช่วยให้เราจัดการและดูแล Container กับ Cluster ของเราได้ง่ายขึ้น เช่น Helm, Prometheus, OpenTracing เป็นต้น ซึ่งในส่วนหนึ่งจะมีเป็น Session ของงาน DevOps BKK ด้วย

แล้วเจอกันครับ 👋

--

--