Skip to content

What & Why?

What is Docker?

  • เป็น VM รูปแบบหนึ่งที่จำลอง computer ใน computer เหมือนกับ VM อื่นเช่น VirtualBox, Parallel แต่ Docker จะมีขนาดที่เล็กกว่ามากๆ การติดตั้งง่ายกว่า VM อื่นๆมากๆ
  • เป็น tools ตัวหนึ่งที่ใช้ run แอพต่างๆ ที่มี environment ต่างกัน
  • docker ก็เป็น Virtual Machine แบบหนึ่ง
  • แอพที่เขียนขึ้นมาจะรันใน environment เดิมเสมอ
  • แต่ละแอพจะรันใน environment ของตัวเองและแยกขาดจากแอพอื่นๆอย่างชัดเจน
  • docker มี standard ทำให้การ deploy software ทำได้ง่าย
  • setup server
  • security

Deployment

Bare metal

ถ้าเราจะติดตั้ง NodeJS web server ในเครื่อง computer เปล่าๆเลย หลายคนก็น่าจะเคยใช้วิธีนี้

เริ่มที่เรามี computer Ubuntu สักตัวนึง
แล้วเราก็ติดตั้ง NodeJS runtime ลงไป

20

จากนั้นก็โหลด source code เข้ามา

21

แล้วก็สั่ง build เราจะได้ files ที่พร้อมสำหรับ website ของเรา

22

จากนั้นก็สั่ง run files ที่ได้จากการ build ก็จะมี process ที่ทำงานอยู่เบื้องหลังเพื่อรองรับการทำงานของ website

23

ถ้ามี Backend หรือ database ก็ทำลักษณะเดียวกัน
โหลด source code -> build -> run
ถ้าเป็น mysql ก็โหลดตัว installer แล้วก็ติดตั้ง จะได้ process ของ mysql ทำงานอยู่เบื้องหลัง

24

จากนั้นก็อนุญาตให้ติดต่อกับ internet ภายนอก

25

Docker

พอเป็น docker ก็จะเป็น ภาพนี้

26

INFO

การที่เราจะ deploy app ด้วย docker เราก็ต้องสร้าง Dockerfile เพิ่มเข้ามา แต่ถ้าจะ deploy app ด้วยวิธีการแบบเก่าก็ทำได้เลยเหมือนเดิมได้เลย

Kubernetes

k8s

Portability

เนื่องจากว่า VM จะมี OS แยกกันต่างหากอย่างชัดเจนเลย การที่จะก๊อปปี้ OS+แอพ ทั้งก้อนไปใส่เครื่องอื่นๆมันทำได้แต่มันจะยากกว่ากันมากๆ

ส่วน docker จะทำการ pack แอพของเราลงใน image ซึ่ง docker มัน lightweight อยู่แล้ว เราสามารถเอา image ไปรันบนเครื่องที่ติดตั้ง docker ได้เลย

Security

Docker engine จะรันบน OS หลักอีกทีหนึ่ง ซึ่งถ้า OS หลักโดนเจาะแล้วเข้าถึง root user ได้ จะทำให้ hacker คนนั้นสามารถควบคุมแอพของเราที่รันบน docker ได้ทั้งหมดเลย hacker สามารถ copy DB ออกไปได้

Virtual Machine ก็จะคล้ายๆกันถ้าโดนเจาะที่ OS หลักก็มีปัญหาเดียวกับ docker อะแหละ แต่ VM จะมี OS เป็นของตัวเองเวลาทำงานก็จะ boot OS ของตัวเองขึ้นมารันบน OS หลักอีกทีหนึ่ง ซึ่งถ้าหาก hacker ต้องการ copy DB ก็จะต้องเจาะ OS ของ VM อีกชั้นหนึ่ง (แต่ไม่เสมอไปนะ อันนี้อยู่ที่การ setup VM ด้วย)

Performance

VM จะใช้ทรัพยากรของเครื่องมากกว่า docker เพราะว่า VM จะต้องมีการ boot OS ก่อนที่จะรันแอพได้ แต่ docker มันมีขนาดเล็กกว่า VM มากๆ การที่จะรัน container ใช้เวลาน้อยมากๆ

การ scaling up ของ docker เองก็ทำได้ง่ายกว่า เพราะว่าเราแค่ใช้ image ตัวเดิม นำเอามารันเป็น container เพิ่มอีกตัวหนึ่งได้เลย แต่สำหรับ VM นั้นเราจะต้องติดตั้ง OS ก่อน จากนั้นก็เอา binary ของแอพไปลง แล้วสั่งรัน แค่ติดตั้ง OS เพิ่มอีกตัวหนึ่งก็ลำบากแล้ว

Scaling

เนื่องจากว่า app ของเราถูก pack เป็น docker image แล้ว มันง่ายมากๆ ที่จะ start มันขึ้นมาอีกหลายๆตัว ไม่ต้องไป download source code แล้วก็ต้อง build แล้วก็ start app

app crashed

ถ้าเกิดว่า app ของเราค้าง รับ request ไม่ได้แล้วต้องการ restart app ละ docker สามารถ handle ส่วนนี้ได้ง่ายๆเลย

Compare

topicVirtual MachineDocker
Boot-Timeขึ้นอยู่กับว่า OS ตัวที่ติดตั้่งมันใช้เวลา boot นานแค่ไหนBoot ได้ในไม่กี่วินาที
Runs onจะรันบน Hypervisorรันบน Docker engine
isolationHardware level process isolationOS Level process isolation
Require storageหลาย GB เลยแค่ลำพัง OS ก็หลาย GB แล้วContainer มัน lightweight มากๆ ขนาดก็มีตั้งแต่ KB -> GB แล้วแต่แอพของเรา
VM TemplateVM นั้นหายากมากๆที่จะมีคนทำ VM เพื่อที่จะเอาไว้รัน NodeJS, JVM, MySQL etcdocker นั้นมี image ที่พร้อมสำหรับการรัน NodeJS, JVM, MySQL etc. อยู่เยอะมากๆ
setupการสร้าง VM เพื่อเอามาใช้รันแอพต้องใช้เวลา setup นานมากๆแค่ติดตั้ง docker engine
resource usageใช้ resource มากกว่าใช้น้อยกว่า