Docker คืออะไร
ในบทความนี้เราจะมาทำการปูพื้นฐานความรู้ความเข้าใจเกี่ยวกับ Docker กันนะครับ
ถ้าสังเกตุจากโลโก้ของ Docker เราจะเห็นว่ามันคือรูปพี่วาฬที่แบกตู้คอนเทรนเนอร์หลากหลายตู้เพื่อแหวกว่ายไปในมหาสมุทร
ซึ่งภาพๆนี้ช่วยอธิบายความหมายของ Docker ได้ดีเลยทีเดียวครับ
Docker คือเครื่องมือช่วยในการบริหารจัดการ containers ซึ่งเป็นตัวเก็บรวบรวมสภาพแวดล้อมสำหรับรันชิ้นส่วนต่างๆของซอร์ฟแวร์ที่เราพัฒนาขึ้นเพื่อที่จะส่งออกไปให้ users ของเราใช้งานนั่นเอง
ถึงตอนนี้อาจจะยังงงว่า container คืออะไร แต่ก่อนจะไปลงรายละเอียดเรามาทบทวนกระบวนการที่นักพัฒนาซอร์ฟแวร์ต้องทำตั้งแต่เริ่มพัฒนาไปจนถึงการปล่อย (deploy) ไปยัง server กันครับ
ชีวิตที่ไม่มี Docker
ลองคิดเล่นๆถ้าคุณมีคอมพิวเตอร์กับ harddisk เปล่าๆสักเครื่องและอยากจะพัฒนาซอร์ฟแวร์ขึ้นมาสักชิ้น คร่าวๆแล้ว สิ่งที่คุณต้องทำคือ
ลงระบบปฏิบัติการ
ที่สนับสนุนภาษาที่คุณจะใช้เขียน (ตัวอย่างเช่น Linux, Windows หรือ MacOs) ลงเครื่องมือในการพัฒนา
ตัวอย่างเช่นต้องลง nodejs, php, python, mysql database, nginx และอื่นๆconfig เครื่องมือ
เช่นการ map domain ตั้งค่าต่างๆของ databaseลง depended library
ตัวอย่างเช่น npm install, pip installbuild package
หลังจากเขียนโปรแกรมเสร็จคุณต้อง build package จริงเพื่อที่จะส่งไปใช้งานจริงใน production
จากตัวอย่างคร่าวๆนี้จะเห็นได้ว่าการจะรันหรือพัฒนาซอร์ฟแวร์สักตัว การสร้างสภาพแวดล้อมของระบบให้เหมาะที่จะรันซอร์ฟแวร์ที่เราพัฒนานั้นประกอบด้วยกระบวนการมากมายที่ต้องใช้เวลาในการจัดเตรียม
คราวนี้ให้สมมุติคร่าวๆว่าคุณมีสภาพแวดล้อมของเซิร์ฟเวอร์ที่ต้อง deploy ซอร์ฟแวร์คือ development, staging, qa และ production คุณต้องทำการจัดการสภาพแวดล้อมนั้นๆเช่นเดียวกับที่คุณทำกับเครื่องอื่นๆซึ่งเป็นการทับซ้อนและเสียเวลา
ซึ่ง Docker หรือกระบวนการ containerization จะมาช่วยเราแก้ปัญหานี้ครับ
Docker image, Docker container
ให้มอง docker image นี้เหมือนตราประทับซอร์ฟแวร์ของเรา และกระดาษเปล่าสัก 4-5 ใบคือ containers ที่อยู่บนserver ที่เราจะ deploy application ขึ้นไปครับ
หลังจากสร้างตราประทับนี้เสร็จ เราก็แค่เอาไปปั้มลงบนกระดาษที่อยู่ตามที่ต่างๆ กระดาษเหล่านั้นก็จะมีรูปภาพตามที่เราต้องการโดยไม่ต้องเสียเวลาวาดใหม่ การพัฒนาและเตรียมสภาพแวดล้อมสำหรับซอร์ฟแวร์ของเราก็เช่นกันครับ
จากภาพด้านบนกระบวนการในการ deploy docker ขึ้นไปยัง server มีดังนี้
- build image บนเครื่อง local machine (กระบวนการนี้ก็คือการสร้างสภาพแวดล้อม เช่นการเลือก OS ติดตั้งซอร์ฟแวร์ที่จำเป็น package code ฯลฯ
- หลังจาก build เสร็จแล้ว image จะถูกสร้างอยู่ใน local registry ของเรา
- ทำการ push image ขึ้นไปยัง remote registry เช่น Dockerhub.io, Amazon Container Registry (ACR) หรือ container registry บนระบบคราวน์อื่นๆ
- server pull image จาก remote registry และนำไปรันเป็น container
จากกระบวนการเหล่านี้ จะเห็นได้ว่าเราทำการสร้าง image เพียงครั้งเดียวและสามารถนำไป deploy ยัง server ต่างๆโดยไม่ต้องจัดเตรียม environment อีก
จริงๆแล้วรายละเอียดการทำงานและประโยชน์ของ Docker ยังมีเฉพาะเจาะจงลงไปอีกมาก แต่สำหรับผู้เริ่มต้นความเข้าใจนี้น่าจะเป็นพื้นฐานในการต่อยอดต่อๆไปได้ครับ
สอบถาม ติชม เสนอแนะ ได้ที่ช่อง comment ด้านล่างเลยครับ