ในยุคที่ความเร็วคือหัวใจสำคัญของธุรกิจ Docker Containers คือกุญแจสำคัญในการเร่งความเร็วให้กับ การพัฒนาแอปพลิเคชันยุคใหม่ จัดเป็นเครื่องมือที่ช่วยให้ทีมพัฒนาสามารถส่งมอบผลิตภัณฑ์ใหม่ๆ ออกสู่ตลาดได้เร็วขึ้น ลดต้นทุน และเพิ่มขีดความสามารถในการแข่งขัน
สารบัญ
Docker Containers คืออะไร ?
ก่อนอื่นผมขอเริ่มต้นด้วยนิยามง่ายๆ ของ Docker กันก่อน ..
“Docker เป็นเหมือนกล่องบรรจุภัณฑ์สำหรับแอปพลิเคชันของคุณ ที่จะช่วยให้สามารถจัดส่งแอปฯไปยังที่ต่างๆ (Environment : สภาพแวดล้อม) ได้อย่างปลอดภัย และง่ายดาย”
และยังเป็น “Open Source Platform ที่ทรงพลัง !”
หรือแม้แต่คำพูดที่ว่า
“Docker คือหัวใจสำคัญของ Microservices และ Cloud Native”
ให้ลองจินตนาการว่าคุณมี ห้องทดลองวิทยาศาสตร์ส่วนตัวที่สามารถพกพาไปได้ทุกที่ ห้องทดลองนี้คือ Container ที่พร้อมจะรองรับการทดลอง และสร้างสรรค์แอปพลิเคชันของคุณ ไม่ว่าจะเป็นการทดสอบไอเดียใหม่ๆ หรือการนำไปใช้งานจริงในสภาพแวดล้อมที่แตกต่างกัน
Containerization
Containerization คือ “A standardized unit of software” มาตรฐานในการจัดเก็บ และรันแอปพลิเคชันแบบแยกส่วน ทำให้สามารถเคลื่อนย้าย และปรับใช้งานได้ในสภาพแวดล้อมที่แตกต่างกันได้ โดยทำให้ทุกอย่างอยู่ภายใน Container เดียวกัน
VM vs Container แตกต่าง ?
นักพัฒนาหลายคนคงรู้จัก VM Server กันอยู่แล้ว ซึ่ง Docker Container เป็นการนำเอา VM Solutions หลายตัวมารวมกัน เพื่อให้เราสามารถนำไป Packing และนำไป Deploy ที่ไหนก็ได้ แถมมีขนาดที่เล็กลง โดยไม่จำเป็นต้องแยกลง OS Server ที่ละส่วนทุกครั้ง การ Rollback version ก็ทำได้อย่างง่ายดาย
รู้จัก Docker Components
Docker Engine
หัวใจหลักที่ทำให้ Container ทำงานบนระบบ Host ได้ ประกอบด้วย 3 ส่วน
- Server (Docker Daemon) มีไว้จัดการ Objects ต่างๆ ของ Docker ได้แก่ Containers Images Network และ Volume โดยจะติดต่อสื่อสารผ่าน API Request เป็นตัวกลาง
- REST API ตัวกลางการติดต่อสื่อสารกับ Docker Daemon
- Client (Docker CLI) ส่วนคำสั่งที่ผู้ใช้สามารถโต้ตอบกับ Docker ผ่านทางชุดคำสั่ง เช่น “
docker run
” “docker build
“
Docker Images
อิมเมจ หรือพิมพ์เขียวของ Container ที่ใช้กำหนดองค์ประกอบของแอปพลิเคชัน ได้แก่ Library Package ที่จำเป็นต่างๆ ของระบบ โดยสร้างจากไฟล์ชื่อ “Dockerfile”
Docker Containers
คือ instance of a Docker image อธิบายง่ายๆ คือศูนย์รวมทุกอย่างที่จำเป็นต่อการรันแอปพลิเคชัน (Code Library และ System) ในสภาพแวดล้อมที่มีน้ำหนักเบา และพกพาได้
Docker Volumes
กลไกในการจัดเก็บข้อมูลถาวรไว้นอก Container ทำให้ข้อมูลยังคงอยู่แม้จะทำลาย Container ไปแล้ว Volume ช่วยให้ข้อมูลสามารถแชร์ระหว่าง Container หลายตัว หรือระหว่าง Container กับ Host ได้
Docker Networks
เครือข่ายที่ทำให้ Container สามารถสื่อสารกัน หรือสื่อสารกับโลกภายนอกได้
Docker Compose
ผู้ใช้สามารถกำหนด และจัดการแอปพลิเคชันบน Docker ที่มีหลาย Container ได้โดยใช้ไฟล์ YAML (docker-compose.yml) ในการปรับแต่งเพิ่มเติม
Docker Swarm
เครื่องมือที่จะเข้ามาช่วยในการจัดกลุ่มให้กับ Docker ในระดับ Cluster ซึ่งทำให้สามารถจัดกลุ่ม Docker Hosts หลายตัว ให้รวมกันเป็น One Cluster ได้ และยังจัดการ Container ในหลายๆ เครื่องได้มีประสิทธิภาพยิ่งขึ้น
บทสรุป
ในบทเรียนครั้งนี้เราจะขอจบไว้เพียงเท่านี้ก่อน หากใครที่อ่านแล้วยัง งงๆ หรือยังไม่เห็นภาพ (ยังไม่ต้องตกใจ) เราจะมาต่อกันในส่วนถัดไป กับตอนจับมือทำ โดยการใช้ Image File ที่ถูกจัดเก็บไว้ใน Docker Registry มาใช้งานน เพื่อติดตั้ง PHP Apache และ PostgreSQL บน Docker กันน