พื้นฐาน 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 , … )


เป็นการเรียกพวก 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 นี้