ทำความรู้จัก Docker และ Software Container
Software Container คืออะไร
ก่อนจะพูดถึง Docker มาทำความเข้าใจเรื่อง Software Container กันก่อนครับ Software Container เป็น concept ของการสร้างสภาพแวดล้อมเฉพาะให้ซอฟต์แวร์ทำงานได้โดยไม่กวนกับซอฟต์แวร์ตัวอื่นบนระบบปฏิบัติการเดียวกัน เราสามารถเอา Container ไปรันในคอมพิวเตอร์หรือ Server เครื่องไหนก็ยังทำงานได้เหมือนเดิม โปรแกรมใน Container ยังทำงานได้ปกติไม่ผิดเพี้ยนจากเดิม ที่ผ่านมา Software Container มีการพูดถึงและมีการใช้งานกันมานานแล้ว อาทิ LXC (Linux Container), Solaris Containers, OpenVZ เป็นต้น แต่ไม่เป็นที่แพร่หลายมากนัก เนื่องจากมีการใช้งานค่อนข้างยุ่งยาก ปัจจุบันจึงได้เกิด Engine ที่ชื่อว่า Docker เป็นตัวจัดการ Container ที่ใช้งานได้ง่ายกว่าตัวอื่นๆทำให้ได้รับความนิยมในวงกว้าง และกำลังเข้ามามีบทบาทในกลุ่ม Developer และ DevOps หรือ System Admin มากขึ้นเรื่อยๆ
ความแตกต่างระหว่าง Virtual Machine กับ Container
- Container จะเป็นการเพื่อจำลองและควบคุมสภาพแวดล้อมสำหรับการรันเฉพาะบาง Service เช่น Contianer ที่รัน nginx ใน ubuntu ก็จะบรรจุ Environment เหล่านี้ไว้เป็น 1 Contianer และรัน service เท่าที่จำเป็นต้องใช้เท่านั้น ทำให้ใช้ทรัพยากรน้อยกว่า Virtual Machine
- Virtual Machine จะเป็นการจำลอง Environment มาทั้ง OS รันขึ้นมาเป็นเครื่อง Server 1 เครื่อง และมีการรัน service หลายๆ service ใน VM เดียวกัน ทำให้แต่ละ VM ต้องใช้ทรัพยากรจำนวนมาก
Docker คืออะไร
Docker ก็เป็น Software Container ที่ถูกพัฒนาขึ้นมาให้สามารถการจัดการ Container ได้ง่าย Image มีขนาดเล็ก แยกเป็นชั้นๆ สร้างแนวคิด build, ship, run ที่แต่ละรอบของการสร้าง Container เร็วขึ้นมาก ทำให้เป็นที่สนใจและกำลังแพร่หลายในกลุ่ม Developer และ System Admin
Docker มีชุดซอฟต์แวร์ให้ใช้งานดังนี้
- Docker Engine เป็น Core หลักในการทำงาน
- Docker Machine เป็นซอฟต์แวร์สำหรับสร้าง หรือ เซ็ตอัพเครื่องให้พร้อมสำหรับ container
- Docker Swarm เป็นซอฟต์แวร์ที่เอาไว้เชื่อมต่อ Docker Engine หลายๆเครื่องมาเชื่อมต่อรวมกันให้เป็น cluster
- Docker Compose เป็นซอฟต์แวร์สำหรับอำนวยความสะดวกในการรัน Container โดยสามารถสั่งรันหลายๆ Container ได้พร้อมๆกัน ตั้งค่าต่างๆ รวมไปถึงเชื่อมโยง Container ให้สามารถทำงานร่วมกันได้
ทำไมจึงควรใช้ Docker
1. กว่าจะติดตั้ง Software ในเครื่อง Server เพื่อรัน Applicaion ก็เสียเวลาไปกับการติดตั้งและ Configulation กันเป็นชั่วโมงแล้วหรือบางคนอาจจะเสียเวลาเป็นวันๆ
2. เครื่อง Development กับ Production ไม่เหมือนกัน เครื่อง Development ลงโปรแกรมไว้เวอร์ชันนึง แต่บนเครื่อง Production ลงไว้อีกเวอร์ชันนึง บางทีเขียน Code บนเครื่อง Development แล้วสามารถรันได้ปกติ แต่เมื่อเอา Code ขึ้น Production อาจจะทำให้ Code เกิด error หรือไม่สามารถทำงานได้
ปัญหาดังกล่าวจะไม่เกิดขึ้นถ้าเราใช้ Docker เพราะ Docker จะช่วยแพ็ค application เหล่านี้อยู่ในรูปแบบของ Container ซึ่งเราสามารถเอา Container ไปรันในเครื่องไหนก็ได้โดย Application ของเรายังทำงานได้ปกติไม่ผิดเพี้ยนจากเดิม ไม่ว่าจะไปรันในเครื่อง Development หรือบน Production Server
องค์ประกอบต่างๆของ Docker
- Docker image
คือต้นแบบของ Container ข้างในจะเป็น Linux ที่มีการติดตั้ง Application และ มีการ Configuration เอาไว้แล้ว ซึ่งเกิดมาจากการ build ไฟล์ Dockerfile ขึ้นมาเป็น image - Docker container
container จะถูกสร้างมาจาก Docker Image ที่เป็นต้นแบบ เกิดเป็น container จะได้ Service หรือ Application ที่สามารถเรียกใช้งานได้ทันที - Docker registry
เราสามารถสร้าง Docker Image แล้วนำไปเก็บรวบรวมไว้บน server (ลักษณะเดียวกับการเก็บ Source Code ไว้บน Github) โดย Docker registry ณ ปัจจุบันก็มีให้เลือกใช้งานได้หลากหลายโดยมี Docker Hub เป็น Docker registry หลักในการเรียกใช้(pull) Docker Image และนอกจากนี้ยังมีผู้ให้บริการ docker registry เจ้าอื่นๆด้วย เช่น Gitlab, Quay.io, Google Cloud เป็นต้น
ส่วนใครที่กำลังจะศึกษาการใช้งาน Docker ก่อนเริ่มใช้งาน ควรจะศึกษาพื้นฐานการใช้งานและการติดตั้ง Software บน Linux มาก่อน คือต้องลองทำจริงติดตั้งเอง Config เองใน Linux ก่อนที่จะย้ายมาใช้ Docker ซึ่ง Docker ก็ทำงานอยู่ภายใต้ Linux เช่นเดียวกัน ถ้าหากเข้าใจพื้นฐาน Linux ดีแล้ว มาลองใช้งาน Docker กันครับ จากที่คุณเคยติดตั้งเป็นชั่วโมงหรือติดตั้งเป็นวันมันจะลดเหลือเพียงไม่กี่นาทีเท่านั้น และทำให้ Developer และ System Admin ทำงานได้ง่ายขึ้นกว่าเดิมมาก
ถ้าหากพร้อมที่จะใช้งาน Docker กันแล้ว มาลองใช้คำสั่งพื้นฐานของ Docker ในบทความนี้กันต่อเลยครับ