Docker Architecture
Docker คืออะไร?
Docker เป็นแพลตฟอร์มสำหรับการพัฒนา, ขนส่ง, และรันแอปพลิเคชันโดยใช้เทคโนโลยี Containerization (การจัดการแอปพลิเคชันในคอนเทนเนอร์) ซึ่งทำให้แอปพลิเคชันสามารถทำงานได้ในทุกสภาพแวดล้อมที่ Docker รองรับได้อย่างราบรื่น ไม่ว่าจะเป็นการพัฒนา, การทดสอบ, หรือการโปรดักชัน
Docker Architecture
Docker Architecture ประกอบด้วยหลายส่วนสำคัญที่ทำงานร่วมกันเพื่อให้ Docker สามารถจัดการกับคอนเทนเนอร์และแอปพลิเคชันได้อย่างมีประสิทธิภาพ โดยสรุปแล้ว Docker Architecture ประกอบไปด้วย 4 ส่วนหลักคือ:
- Docker Client
- Docker Daemon
- Docker Images
- Docker Containers
- Docker Registries
1. Docker Client
Docker Client เป็นส่วนที่ผู้ใช้สามารถสื่อสารและควบคุมการทำงานของ Docker ผ่านคำสั่ง CLI (Command Line Interface) หรือผ่าน Docker API เมื่อผู้ใช้รันคำสั่ง Docker เช่น docker run, docker build, หรือ docker ps, Docker Client จะส่งคำสั่งเหล่านั้นไปยัง Docker Daemon เพื่อดำเนินการคำสั่งตามที่ผู้ใช้ต้องการ
- ตัวอย่างคำสั่งที่ใช้ใน Docker Client:
docker run hello-world
2. Docker Daemon
Docker Daemon หรือที่เรียกว่า dockerd เป็นกระบวนการหลักที่ทำงานเบื้องหลังเพื่อจัดการกับ Docker Containers และ Docker Images มันรับคำสั่งจาก Docker Client และทำการประมวลผลคำสั่งเหล่านั้น เช่น การสร้างคอนเทนเนอร์, การจัดการคอนเทนเนอร์ที่กำลังทำงาน, การดาวน์โหลดหรืออัปโหลด Docker Images ไปยัง Docker Registries
- Docker Daemon ทำงานใน background และรับผิดชอบในการสื่อสารกับ Docker Client และ Docker Registries
- สามารถทำงานหลายๆ คำสั่งในเวลาเดียวกัน เช่น การดาวน์โหลด image จาก Docker Hub และการจัดการ container พร้อมๆ กัน
3. Docker Images
Docker Images เป็นแม่แบบที่ใช้ในการสร้าง Docker Containers โดยแต่ละ image จะบรรจุข้อมูลที่จำเป็นสำหรับการรันแอปพลิเคชัน รวมถึงไฟล์ระบบ, ไลบรารี, และโปรแกรมที่ต้องการ Image เป็นลักษณะของไฟล์ที่ไม่สามารถแก้ไขได้ (read-only)
- Docker Image มักจะถูกสร้างขึ้นจากไฟล์ที่เรียกว่า Dockerfile
- เมื่อสร้าง Docker Image แล้ว สามารถนำไปใช้งานเพื่อสร้าง Docker Container ได้
4. Docker Containers
Docker Containers เป็นอินสแตนซ์ที่ทำงานจาก Docker Images โดยแต่ละ Container จะเป็นการรันแอปพลิเคชันแยกต่างหากในสภาพแวดล้อมที่ถูกจำกัดและแยกออกจากกัน แต่ยังคงสามารถแชร์ทรัพยากรบางอย่าง (เช่น kernel) กับเครื่อง Host ได้
- Containers สามารถทำงานได้อย่างอิสระจากกันในแง่ของไฟล์ระบบและการตั้งค่าภายใน
- แต่ละ Container มีการตั้งค่าที่สามารถควบคุมได้ เช่น การตั้งค่าพอร์ต, การเข้าถึงไฟล์ระบบ
5. Docker Registries
Docker Registries คือที่เก็บ Docker Images ที่สามารถดาวน์โหลดหรืออัปโหลดจากที่ต่างๆ ได้ Docker Hub คือ Docker Registry ที่นิยมใช้งานกันมากที่สุด ซึ่งเป็น repository สาธารณะที่มี Docker Images ให้เลือกใช้งานมากมาย
- Docker Hub: เป็น Docker Registry ที่ถูกสร้างขึ้นมาเพื่อจัดเก็บและเผยแพร่ Docker Images
- Private Registries: องค์กรหรือผู้ใช้สามารถสร้าง Docker Registries ส่วนตัวได้เอง เช่น Docker Registry ที่โฮสต์ภายในองค์กร
Diagram ของ Docker Architecture
+-----------------+ +------------------+ +--------------------+
| Docker Client | <----> | Docker Daemon | <----> | Docker Registries |
+-----------------+ +------------------+ +--------------------+
| |
| v
| +------------------+
| | Docker Containers |
| +------------------+
|
v
+-------------------------+
| Docker Images |
+-------------------------+
การทำงานของ Docker
การทำงานของ Docker ประกอบไปด้วยขั้นตอนต่างๆ ดังนี้:
- Docker Client ส่งคำสั่งไปยัง Docker Daemon ผ่าน Docker API หรือ CLI
- Docker Daemon ทำการจัดการคำสั่ง เช่น การสร้าง, รัน, หยุด, หรือจัดการคอนเทนเนอร์ต่างๆ
- หากคำสั่งต้องการ Docker Image ที่ไม่มีในเครื่อง, Docker Daemon จะดาวน์โหลดจาก Docker Registry
- เมื่อคำสั่งทำงานสำเร็จ, Docker Daemon จะสร้าง Docker Container โดยอิงจาก Docker Image
- Docker Container จะรันแอปพลิเคชันตามที่กำหนดไว้ใน Dockerfile หรือ Docker Image
ข้อดีของ Docker Architecture
- ความสามารถในการแยกส่วน: Docker ทำให้สามารถแยกแอปพลิเคชันออกจากกันได้เป็นส่วนๆ โดยไม่กระทบกับกันและกัน
- การขนส่งและการปรับใช้: Docker ช่วยให้สามารถพัฒนาแอปพลิเคชันในเครื่องหนึ่งแล้วนำไปใช้ในเครื่องอื่นได้อย่างราบรื่น
- ประหยัดทรัพยากร: Docker ใช้เทคโนโลยีที่เบาในการรันแอปพลิเคชันในคอนเทนเนอร์ ซึ่งทำให้ไม่จำเป็นต้องสร้างเครื่องเสมือน (VM) ขึ้นมา
- ง่ายต่อการปรับขยาย: Docker ทำให้สามารถจัดการกับคอนเทนเนอร์จำนวนมากได้ง่ายเมื่อใช้งานร่วมกับเครื่องมือการจัดการคอนเทนเนอร์เช่น Kubernetes
สรุป
Docker Architecture ประกอบไปด้วยส่วนหลักๆ ได้แก่ Docker Client, Docker Daemon, Docker Images, Docker Containers, และ Docker Registries ซึ่งแต่ละส่วนทำงานร่วมกันเพื่อให้สามารถพัฒนา, ขนส่ง, และรันแอปพลิเคชันในรูปแบบคอนเทนเนอร์ได้อย่างมีประสิทธิภาพ Docker ช่วยให้การจัดการแอปพลิเคชันในสภาพแวดล้อมต่างๆ เป็นไปได้ง่าย และสามารถพัฒนาแอปพลิเคชันที่มีความยืดหยุ่นและง่ายต่อการปรับขยาย