Vagrant to Docker สำหรับนักพัฒนาที่ใช้ Laravel Framework (1)

สำหรับทีมพัฒนาที่ทำงานเป็นทีม development environment เป็นเรื่องน่าปวดหัวอย่างหนึ่ง เนื่องจากการพัฒนาที่ local environment ของแต่ละคนอาจจะไม่เหมือนกัน ยกตัวอย่างสำหรับ LAMP stack ที่มี Linux Apache MySQL PHP นั้น ที่ local environment ของแต่ละคนอาจจะไม่เหมือนกัน อย่างเช่น Apache MySQL PHP นั้นเป็นคนละ version หรือมี config ภายในที่แตกต่างกัน ปัญหาคลาสสิกที่มักจะเกิดขึ้นเมื่อขึ้น Production ก็คือ

“อ้าวพี่… ทำไมรันที่เครื่องผมรันได้?!?!”

นั้นก็เพราะ environment ไม่เหมือนกัน

Vagrant จึงเข้ามาแก้ปัญหานี้ โดยการมัดรวม stack เหล่านั้นเป็นก้อนเดียวกัน และนั้นมันไปรันบน VM ซึ่งจะทำให้นักพัฒนาในทีมทุกคนที่ใช้ stack ก้อนนี้มั่นใจได้ว่าเราได้พัฒนาบน enveironment เกียวกันกับเพื่อนในทีมและ production

นับตั้งแต่ Vagrant เข้ามาทุกคนในทีมก็มีความสุข เนื่องจากปัญหา local environment ที่ไม่เหมือนกันนั้นได้ถูกกำจัดไป

ซึ่งทุกคนก็มีความสุขกันมาสักพัก แต่ก็พบว่าสิ่งที่เกิดหรือต้องการมากไปกว่านั้นอีกคน

Vagrant มันช้ามาก การ provision ทีหนึ่งใช้เวลาหลายนาที… ซึ่งจริงๆก็ไม่ใช่ปัญหาใหญ่เท่าไร แต่นานไปเราก็เริ่มเบื่อหน่ายที่เปิดคอมฯเสร็จแล้วต้องมานั่งรอ provision นานๆ

Docker คือกระเอกของเราในตอนนี้

ฝั่งซ้ายมือคือการทำงานแบบ VM (Virtual machine) ) จะเห็นว่าในการ provision VM หนึ่งตัวจะมีการสร้างคอมฯจำลองขึ้นมาหนึ่งเครื่อง โดยมี OS เป็นของตัวเอง share RAM/CPU จาก Host ซึ่งสิ่งเหล่านี้ใช้เวลานาน

ฝั่งขวาคือการทำงานแบบ Containers ไม่มีการสร้าง OS, share RAM/CPU จาก Host แต่ทุกอย่างจะรันบน Docker Engine ซึ่งรันอยู่บน Host OS อีกที

นี้คือโลโก้ของ Docker ลองนึกภาพตาม Containers (มี s) หลายตัวทำงานอยู่บน Docker Engine (ตัวปลาวาฬ) ยกตัวอย่าง LAMP stack ก็จะมี container อยู่ 4 ตัวก็คือ Linux Apache Mysql PHP ที่บรรทุกอยู่บนตัว Docker หรือ รันอยู่บน Docker Engine ระบบการทำงานแบบนี้ทำให้ Docker นั้นทำงานเร็วกว่า Vagrant

Vagrant อาจจะ provision VM ได้เร็วในหลักนาที

แต่

Docker ทำได้ในหลักวินาที

ในครั้งแรกที่ใช้งาน Docker ผมก็ปวดหัวพอสมควรในการเริ่มต้น ต้อง google อ่าน document ต่างๆเกี่ยวกับ Docker เยอะมาก ลองผิดลองถูกจนท้อและคิดจะกลับไปใช้ Vagrant เหมือนเดิมก็ได้(วะ) เนื่องจากธรรมชาติของการเป็น developer นั้นเรื่องเกี่ยวกับการ setup server ต่างๆนั้น ทักษะที่ใช้มันคนละ skill กัน ทำให้การเริ่มต้นนั้นเป็นไปได้ค่อนข้างลำบาก

แต่สุดท้ายเรามีผู้กอบกู้ของเหล่านักพัฒนาครับ ในที่นี้ขอเจาะจงไปที่นักพัฒนาที่ใช้ Laravel นะครับ นั้นก็คือ Laradock ซึ่งจะขอแยกไป post หน้าครับ…