เมื่อวันเสาร์ได้มีโอกาสมาเรียนรู้เรื่อง Docker ที่จัดแบบเหมารอบรำวงโดย Jirayut Nimsaeng
งานนี้เรียกว่าครบเครื่องทั้งบู๊ทั้งบุ๋น เดียร์ ออกแบบ Course นี้ได้ดีมากเรียกได้ว่ากลมกล่อม หอมชวนชิมเลยหล่ะ ทำให้การสอนดูค่อนข้างไหลลื่นและทำให้คนเรียนเห็นภาพได้ง่ายมาก แถมยังใส่เรื่อง Best Practice ต่างๆ และประสบการณ์ตรงในการใช้ลงมาด้วย … แจ่มจริงครับ
ขณะที่ผมพิมพ์นี้ผมรู้สึกได้ว่า Docker มันง่ายมากๆ แต่ตอนก่อนหน้านี้ไม่ได้รู้สึกอย่างนั้น เพราะไม่ค่อยได้มีเวลาไปจับมันอย่างจริงจัง รวมถึงไม่ค่อยได้อ่านอ่านหนังสือเกี่ยวกับมันเท่าไหร่ พอเดียร์อธิบายให้เห็นภาพรวมถึงพาทำไปด้วยกัน…. ง่ายขึ้นมาทันทีเลย 555
Docker เป็น VM ที่เปรียบตัวเองเหมือน Container เราอยากจะได้ Process อะไรก็เอามันมาเรียงร้อยต่อกันเป็นสิ่งที่เราต้องการ เช่น เราต้องการทำ infrastructure ของ web app สักตัว เราก็ต้องมี VM ที่มี ubuntu + nginx + webapp + postgresql อะไรจำพวกนี้ ซึ่งบางทีเราก็อยากจะทดสอบกับ postgresql version 8 และ postgresql version 9 รวมถึง webapp 4.3 กับ webapp 5.5 เราก็ต้องใช้ VM ถึง 4 ตัว
VM1 : ubuntu 14.04 + nginx 1.6 + postgresql 8.4 + webapp 4.3
VM2 : ubuntu 14.04 + nginx 1.6 + postgresql 8.4 + webapp 5.5
VM3 : ubuntu 14.04 + nginx 1.6 + postgresql 9.3 + webapp 4.3
VM4 : ubuntu 14.04 + nginx 1.6 + postgresql 9.3 + webapp 5.5
ซึ่งนั่นหมายความว่า เราต้องเสียทรัพยากรณ์ของเครื่องไปกับ ubuntu 14.04 กับ nginx 1.6 ไปเยอะ (ตั้ง 4 ชุด ทั้งๆ ที่ VM ทุกตัวใช้ไอ้เจ้านี้เหมือนๆ กัน)
Docker จัดการปัญหานี้ได้ดี โดยที่มันจะแยก image ของ process เหล่านี้ออกมา เป็น ชุด โดยกรณีอย่างข้างบนนั้น เราก็ใช้ ubuntu 14.04 กับ nginx 1.6 แค่ container เดียวเท่านั้น ส่วน postgresql ก็ใช้ 2 container และ webapp 2 container
ประสิทธิภาพของมันก็เรียกว่าแทบจะเทียบเท่า native
Docker support app บน Linux ส่วนชาว Mac และ Windows ก็อดไป แต่ถ้าอยากจะเล่น Docker ก็ใช้ผ่าน virtualbox ได้ง่ายๆ โดยมี Boot2Docker เป็นตัวช่วย
boot2docker init
boot2docker up
boot2docker ssh
คือคำสั่งง่ายๆ … แค่นี้เราก็ใช้ docker ได้แล้ว จริงๆ นะ
แล้วเราก็สามารถ pull image ที่เราต้องการได้จาก dockerhub ด้วยคำสั่ง
docker pull ubuntu:14.04
แค่นี้เราก็มี ubuntu image version 14.04 มาใช้แล้ว ถ้าอยากได้ version อื่นๆ และ version ล่าสุดก็สั่งแค่
docker pull ubuntu
เท่านี้ก็ได้
การที่เราไม่ได้ระบุ TAG ( ไอ้ :14.04 นั่นแหล่ะ ) มันก็จะหมายถึง tag latest ลองสั่ง
docker images
ดูได้
ถ้าเราอยาก ลองใช้ ก็ลองเอา image มา run เป็น container โดยใช้คำสั่ง
docker run ubuntu echo “hello world”
มันก็จะเอา image ubuntu:latest มาสร้าง container แล้วก็ run process echo “hello world” เราก็จะได้ผลลัพธ์ ออกมาดังนี้
hello world
เราสามารถดูสถานะของ containers ที่เราได้สั่งมันทำงานไปแล้วได้ด้วยคำสั่ง
docker ps -a
เราสามารถสร้าง image ของเราเองจาก container
docker commit [cid] ubuntu-ssh
เราก็จะได้ image ชื่อ ubuntu-ssh จาก container ที่มี container id ตามที่ระบุ
อ้อ อยากจะลองไปพิมพ์ bash command เล่นๆ เพื่อทำ trouble shooting ก็สามารถใช้
docker run -i -t ubuntu:14.04 /bin/bash
อันนี้เป็นเบื้องต้นมากๆ เดี๋ยวมีเวลาจะมาเหลาต่อละเอียดๆ 🙂