พื้นฐาน Docker
ก่อนจะ รู้จัก Docker มาทำความรู้จัก Container ก่อน
Container
- คือ ที่ ที่มีสภาพแวดล้อมเฉพาะสำหรับรัน service ต่างๆ โดยไม่ต้องจำลอง OS หรือมีการจองพื้นที่และหน่วยความจำ
- อาศัยทรัพยากรจากเครื่องหลักที่มี
Software Container
- แนวคิดการสร้างเครื่องมือหรือซอฟต์แวร์ที่ใช้จัดการและควบคุม Container
- จำลองสภาพแวดล้อมเพื่อการใช้งาน service นั้นๆ
- ช่วยจัดการ ให้แต่ละ service ทำงานได้ โดยที่แต่ละ service ไม่ทำงานรบกวนกัน
- ทุก service สามารถ คุยกันได้
Software Container นอกจาก Docker ยังมีตัวอื่นๆ เช่น
- Google Kubernetes Engine ( GKE )
- Amazon ECS
- หรือ อย่าง Linux ที่มี software Containers ( LXC ) เขียนโดย C, Python, Shell, Lua.
Docker คือ อะไร ?
- Docker engine ตัวหนึ่งที่มีการทำงานในลักษณะจำลองสภาพแวดล้อมขึ้นมาบนเครื่อง server ลักษณะแบบ Virtual Environment (VE) เพื่อใช้ในการ run service ที่ต้องการ มีการทำงานคล้ายคลึงกับ Virtual Machine ( VM )
Virtual Machine vs Virtual Environment
ทั้งสองตัว มีประโยชน์ในการ ที่สามารถจำลอง สภาพแวดล้อม เพื่อรัน service
Virtual Machine
การจำลอง สภาพแวดล้อมต่างๆขึ้นมา โดยมี การจอง cpu ram harddisk เสมือนเป็นอีกเครื่องนึง
Virtual Environment
คล้าย Virtual Machine แต่ต่างการที่ Virtual Environment ไม่มีการจอง cpu ram harddisk แต่จะอาศัยทรัพยากร จากเครื่องที่มี
ทำไมต้องใช้ Docker
- โดยปกติแล้ว เวลาเราจะรัน service ใดๆ ก็ตาม สิ่งที่ทำคือ ติดตั้งอะไรต่างๆที่จำเป็นสำหรับ service นั้นๆ บน OS ใดๆ แต่สำหรับ Docker จะใช้ Container ในการจำลองสภาพแวดล้อมขึ้นมา เพื่อ service นั้นๆ โดยไม่มีส่วน ของ OS เข้ามาเกี่ยว
- ป้องกันการทำงานรบกวนกัน ในกรณีที่ เครื่องเรา อาจมี service มากกว่า 1 service และอาจใช้ port ที่ทับกัน
- ช่วยลดเวลาในการขึ้น production หรือมีการนำไป deploy ตามเครื่องต่างๆ ตาม สโลแกน “Build Once Run Everywhere”
ข้อจำกัดของ Docker
- OS ที่รัน Docker ได้จะต้องเป็น Linux เท่านั้น เพราะอย่างที่ได้กล่าวไปว่า มันทำงานอยู่บน LXC ที่อยู่บน Linux ถ้าเราต้องการรันบน OS อื่น เราก็ต้องทำการจำลอง Linux ขึ้นมา ( VMs )
โครงสร้างของ Docker
แบ่งหลักๆ เป็น 4 ส่วน
- Docker Client ( docker engine )
ส่วนของ engine สำหรับ รันคำสังต่างๆของ docker ( run , build , images , push , … )
- The Docker daemon ( dockerd )
ส่วนนึงภายใน Docker Host
ตัวรับคำสั่งที่ส่งมาจาก Docker Cilent
และนำมาจัดการสิ่งที่เรียกว่า Docker Object
ภายในอีกที
ส่วนนึงภายใน docker host ที่ใช้ สำหรับ จัดการ container ต่างๆ (dockerd)
ที่เก็บ docker image (image repository) สำหรับ ใน run ภายใน container มี ที่เก็บหลักชื่อว่า Docker Hub ซึ่งเป็น ที่เก็บ images ที่มีใช้อยู่ทั่วไป และยังมี Private Registry
ที่เราสามารถสร้างใช้เองได้เช่นกัน
เป็นการเรียกพวก images,container,networks,volumes .. แบบสั่นๆ
คือ Template ตัว service ที่เราต้องการจะใช่ เช่น ubuntu node nginx ,..
คือส่วนที่เป็นการเอา images
มา run เพื่อใช้งาน
ตัวอย่าง docker run
เช่น
$ docker run ubuntu pwd
สิ่งที่จะเกิดขึ้นคือ
- ถ้าไม่มี images
ubuntu
อยู่ในเครื่อง มันจะทำการ pull
images จาก docker hub
ลงมา
- จากนั้นเมื่อมี
images
แล้ว docker จะทำการ สร้าง container
ขึ้นมาในสถานะ created
- จากนั้น docker จะทำการเชื่อมต่อ
network
ซึ่งถ้าไม่มีการกำหนด มันจะใช้ network default ที่มี
- จากนั้น docker จะขึ้นสถานะ
running
แล้ว run command pwd
จากที่เราพิมพ์ไป ใน container นี้