Please wait...
SOLUTIONS CORNER
รู้จักกับ Docker แพลตฟอร์มซอฟต์แวร์สำหรับนักพัฒนาและผู้ดูแลระบบ

รู้จักกับ Docker แพลตฟอร์มซอฟต์แวร์สำหรับนักพัฒนาและผู้ดูแลระบบ
รู้จักกับ Docker คืออะไร


วิธีการติดตั้ง Docker และเริ่มต้นทำงานด้วยแอปพลิเคชั่นในแบบ Container

ใครก็ตามที่เคยได้ทดลองตั้งค่าโปรแกรมซอฟต์แวร์ที่ซับซ้อน ตั้งแต่เริ่มต้นจากที่ไม่มีอะไร ผ่านบรรทัดคำสั่ง (Command Line) จะต้องรู้ว่ามันเป็นวิธีที่ยากแค่ไหน นอกจากนี้คุณยังจะได้พบกับความท้าทายอย่างต่อเนื่อง เช่น การพึ่งพาซอฟต์แวร์ที่คุณไม่ได้ติดตั้งและความเข้ากันไม่ได้ (Incompatibilities) กับซอฟต์แวร์ที่ติดตั้งอยู่ก่อนแล้ว และเมื่อถึงจุดๆ หนึ่ง พวกเราส่วนใหญ่ก็มีความต้องการชุดคำสั่ง (Script) ที่จะมาช่วยจัดการกับเรื่องนี้ให้มันสำเร็จไปได้อย่างรวดเร็ว
 
นอกจากนี้ มันก็ยังเป็นเรื่องยากที่จะให้ซอฟต์แวร์ที่แตกต่างกันทำงานควบคู่กันไป ฉะนั้นจะเกิดอะไรขึ้น ถ้าคุณต้องการเรียกใช้โปรแกรมเดียวกันในเวอร์ชันที่แตกต่างกัน? ลองมาดูกันว่า Docker จะช่วยคุณไขแก้ปัญหาเหล่านี้ได้อย่างไร
 
Docker เป็นแพลตฟอร์มซอฟต์แวร์ที่แยกแอพพลิเคชั่นของคุณออกจากกัน โดยการเรียกใช้งานพวกมันในส่วนเฉพาะที่เรียกว่าคอนเทนเนอร์ (Container) โดย Docker Container จะมีส่วนที่คล้ายกันกับ Virtual Machine (VM) เพียงเล็กน้อย ตรงที่มันจะแยก Content ของมันออกจากซอฟต์แวร์อื่นๆ ที่กำลังทำงานอยู่ในเครื่อง
 
Container ยังมีส่วนที่แตกต่างจาก Virtual Machine ในอีกหลายๆ ด้าน ในขณะที่ VM เป็นโฮสต์ของระบบปฏิบัติการทั้งหมด แต่ Container นั้นไม่ใช่ เพราะ Container จะไม่ทำงานบนไฮเปอร์ไวเซอร์ Type-1 ที่เข้ามาแทนที่ระบบปฏิบัติการหลักของคอมพิวเตอร์ เนื่องจาก VM ต้องทำงานบนเซิร์ฟเวอร์หลายตัว แต่จุดเด่นของ Container ก็คือการใช้ทรัพยากรที่น้อยกว่าการทำงานแบบ Virtual Machines ดังนั้น Container จึงถูกสร้างมาเพื่อแก้ไขข้อจำกัดของ Virtualization
 
แต่ Docker Container จะเก็บเฉพาะสิ่งที่จำเป็นในการเรียกใช้บริการซอฟต์แวร์เดี่ยวๆ เช่น ฐานข้อมูล (Database) หรือเว็บเซิร์ฟเวอร์ (Web Server) ซึ่งรวมถึงบริการของตัวมันเอง ตลอดจน Dependency ต่างๆ ที่มันจำเป็นต้องเรียกใช้ เช่น ไลบรารีซอฟต์แวร์ (Software Library) ดังนั้น จึงไม่มีเซอร์วิสของระบบปฏิบัติการหลัก (Underlying Operating System Services) ใน Container แต่มันจะได้รับสิ่งเหล่านี้จากเคอร์เนล (Kernel) ของระบบปฏิบัติการหลักของคอมพิวเตอร์โฮสต์แทน
 
นี่จึงเป็นสาเหตุที่ทำให้ Docker Container มีน้ำหนักเบา เนื่องจากพวกมันต้องการพื้นที่ในการเก็บข้อมูลและหน่วยความจำที่น้อยกว่าในการทำงาน นอกจากนี้ พวกเขายังสามารถพกพามันไปยังที่ต่างๆ ได้ เพื่อช่วยให้นักพัฒนาหรือผู้ดูแลระบบสามารถเคลื่อนย้ายไปมาระหว่างเครื่องต่างๆ ได้อย่างรวดเร็ว ในขณะเดียวกันก็ยังมั่นใจได้ว่า พวกเขาจะยังคงทำงานได้อย่างต่อเนื่อง พวกมันกำลังกลายเป็นเครื่องมือประมวลผลบนคลาวด์ที่ได้รับความนิยมเป็นอย่างมาก เพราะมันทำให้ผู้พัฒนาซอฟต์แวร์และผู้ทดสอบทำงานร่วมกันได้อย่างง่ายดาย
 
Docker Engine เป็นแพลตฟอร์มซอฟต์แวร์ที่ใช้สำหรับจัดการและเรียกใช้ Container ซึ่งมันจะถูกจัดเก็บในรูปแบบที่เรียกว่า Libcontainer ขณะเดียวกัน คุณจะต้องติดตั้งสิ่งนี้ด้วยวิธีเฉพาะและจะต้องใช้ระบบปฏิบัติการ (OS) ที่คุณเลือก ถ้าคุณกำลังใช้งานระบบปฏิบัติการ Windows คุณจะต้องติดตั้ง Docker Desktop, แต่ถ้าระบบปฏิบัติการของคุณคือ Mac คุณสามารถติดตั้ง Docker for Mac ได้ ซึ่งทั้งคู่สามารถดาวน์โหลดโปรแกรมสำหรับติดตั้งได้ และในส่วนของ Linux Distros ที่ถูกจัดเตรียมไว้อย่างถูกต้องนั้น ต้องการเพียงแค่คำสั่งที่เรียบง่ายอย่าง "sudo apt-get install docker-engine –y " จากบรรทัดคำสั่ง เท่านั้นเอง
 
ถัดจากตรงนั้น คุณสามารถสร้างและเรียกใช้ Docker Container ได้ทันที และถ้าคุณคิดที่จะทำเช่นนั้น ก่อนอื่นคุณจะต้องมี Image ซึ่งเป็น Template ที่จะมาช่วยอธิบายถึงสิ่งที่จะทำงานในนั้น ให้ลองคิดเล่นๆ ว่ามันเป็นรายการช้อปปิ้งที่จะต้องบอกกับคอมพิวเตอร์ของคุณ ซึ่งนั่นก็หมายถึงทุกๆ อย่างที่มันจำเป็นสำหรับ Container ในกรณีที่คุณต้องการเรียกใช้แอพพลิเคชั่นใน Docker Container คุณก็อาจจะต้องหา Image ที่เหมาะสมสำหรับการลงทะเบียนใน Docker Container ซึ่งก็รวมถึง Image ต่างๆ ที่ผู้คนสร้างขึ้นมาและแชร์ให้ใช้งาน แม้ว่าองค์กรต่างๆ จะสามารถสร้างการลงทะเบียนของตนเองสำหรับงานภายในได้ แต่สิ่งที่ได้รับความนิยมมากที่สุดนั้นดูเหมือนว่าจะเป็น Docker Hub ซึ่งการติดตั้ง Docker ของคุณจะตรวจสอบโดยอัตโนมัติ
 
วิธีที่ง่ายที่สุดในการเรียกใช้ Docker Image เพื่อเรียกใช้งานจาก Hub จะเป็นการใช้คำสั่ง Run ของ Docker ซึ่งเป็นตัวช่วยในการเรียกใช้โปรแกรมหรือคำสั่งต่างๆ ภายใน Windows และโปรแกรมอื่นๆ เมื่อมาถึงตรงนี้แล้ว เราจะลองสร้าง Docker Container ในเครื่อง ด้วย Python 3 Software Development Environment ตามขั้นตอนต่อไปนี้:
 

docker run -it python:3
 
ตัวดำเนินการ -it จะเป็นเชลล์แบบโต้ตอบ (Interactive Shell) ที่รับคำสั่งจากผู้ใช้สำหรับ Container หากไม่มีพวกมัน ระบบก็คงจะทำงานและหยุดโดยที่ไม่มีการแจ้งให้คุณโต้ตอบกับมัน สำหรับคำสั่งในต้อนท้าย, python:3 จะเป็นชื่อของ Container ที่มีแท็กแสดงเวอร์ชันที่คุณต้องการ
 
เนื่องจากการติดตั้ง Docker ใหม่ของคุณยังไม่มี Image ดังกล่าวติดตั้งไว้ภายในเครื่อง มันจึงต้องดาวน์โหลดก่อนที่จะใช้งาน เริ่มจาก เปิดหน้าต่างบรรทัดคำสั่งใหม่ขึ้นมา และพิมพ์ docker ps -a เพื่อแสดง Container ที่กำลังทำงานและหยุดทำงาน
 
จากนั้น จะปรากฏรายชื่อของ Container ทั้งหมดที่มี ID และสถานะของพวกมัน ซึ่ง ID เหล่านั้นจะแตกต่างกันออกไปบนเครื่องของคุณ
 
ขั้นตอนต่อไปให้เปิด Windows Terminal ใหม่ขึ้นมา เพื่อให้คุณสามารถเรียกใช้คำสั่ง Docker ได้มากขึ้น ในขณะที่ปล่อยให้ Container ของคุณทำงาน และในหน้าต่างใหม่นั้นให้คุณป้อน docker stats เพื่อที่มันจะแจ้งให้คุณทราบว่า Resources ใดที่ Container นี้กำลังใช้อยู่
 
คุณสามารถจัดการกับ Container โดยใช้ชื่อหรือ ID ของมัน ซึ่งแต่ละเครื่องจะสร้างขึ้นมากโดยการสุ่ม และการจดตัวอักษรสองสามตัวจากด้านหน้า ID นั้น จะทำได้ง่ายกว่า ยกตัวอย่างเช่น เราสามารถหยุดการทำงานของ Container ที่มี ID ff0996778a5a และชื่อ hopeful_golick โดยการพิมพ์ docker stop hopeful_golick หรือ docker stop ff09 เป็นต้น
 
กลับไปที่หน้าต่าง Terminal อื่นๆ Python เชลล์แบบโต้ตอบ (Interactive Shell) จะหายไป และคุณก็จะกลับมาที่ตัวพร้อมรับคำสั่ง (System Prompt) ของคุณ จากนั้น ปิดหน้าต่าง Terminal ที่สองของคุณ และกลับไปที่หน้าต่างเดิม
 
พิมพ์ docker ps -a อีกครั้ง Container ของคุณยังคงแสดงให้เห็นในรายการ เพราะคุณเพิ่งหยุดเรียกใช้มันเมื่อสักครู่ หากคุณต้องการเรียกใช้งานมันอีกครั้ง คุณแค่ทำซ้ำโดยใช้คำสั่ง Run Commands เช่นเดียวกับที่เราใช้ก่อนหน้านี้ และในครั้งนี้ Docker ก็จะเรียกใช้ Image ในเครื่องของคุณ
 
ขั้นตอนนี้ให้พิมพ์ docker images. แล้วคุณก็จะได้พบกับรายการของ Images ทั้งหมดที่มีอยู่ในเครื่องของคุณ ซึ่งควรจะแสดงเฉพาะ Python Image ของคุณ นอกจากนี้ คุณยังสามารถสร้าง Container ใหม่ๆ ได้มากเท่าที่คุณต้องการโดยใช้ Image นั้น
 
เราจะทำการลบ Image เหล่านี้ โดยใช้คำสั่ง rmi ของ Docker แต่อันดับแรก เราต้องลบ Container ที่เราสร้างขึ้นมาก่อนหน้านี้ ดังนั้น ให้พิมพ์ข้อความต่อไปนี้ แทนที่ตัวอักษรสองสามตัวแรกของ Container ID และ Image ID ด้วยตัวคุณเอง ตามตัวอย่างนี้ :
 

docker rm ff09
 
docker rmi d6a7
 
มาถึงขั้นตอนนี้ เมื่อพิมพ์ docker ps -a และ docker images มันไม่ควรแสดงอะไรให้เห็นเลย เพราะทุกอย่างถูกลบไปหมดแล้ว
 

แอปพลิเคชั่นแบบ Container

 

เราได้เรียกใช้สิ่งที่เรียกว่า Base Image ใน Docker เพราะนี่คือคอนเทนเนอร์ที่ใช้ Image ที่เรียบง่ายและน้อยที่สุดของซอฟต์แวร์อย่างที่คุณต้องการ อย่างไรก็ตาม บ่อยครั้งที่คุณอาจจะต้องทำการปรับแต่ง Image เหล่านั้น และสิ่งที่คุณจะต้องทำก็คือการจัดวางสิ่งสำคัญไว้ด้านบนสุด และให้คุณกำหนดสิ่งต่างๆ เหล่านั้นในไฟล์ Docker หรือจะลองใช้หนึ่งในวิธีการต่อจากนี้เพื่อสร้าง Docker-based Applications (หรือรู้จักกันในนามของแอปพลิเคชั่นในแบบ Container)
 
เริ่มต้นด้วยการสร้าง Text File ที่เรียกว่า Dockerfile โดยไม่ต้องมีส่วนขยาย ในไดเรกทอรีที่ว่างเปล่าที่เรียกว่า Converter ซึ่งสิ่งนี้ถือว่าเป็นคำสั่งที่จะบอกกับ Docker ถึงวิธีการสร้าง Container ของคุณ
 

FROM python:3
 
WORKDIR .
 
COPY . .
 
CMD python ./converter.py
 
FROM จะบอกเราว่า Image ไหนที่เราจะใช้เป็นพื้นฐาน (Base) ซึ่งเราจะใช้แบบเดียวกันกับก่อนหน้านี้
 
WORKDIR / เป็นการกำหนด Working Directory สำหรับไฟล์ที่สนับสนุน (ซึ่งในระบบ Ubuntu ของเราที่ใช้ในปัจจุบันจะแสดงโดยใช้สัญลักษณ์ '.')
 
COPY จะเป็นตัวบอกให้ Docker ทำการคัดลอกไฟล์ทั้งหมดจาก Directory ที่ใช้ทำงาน ลงในคอนเทนเนอร์
 
CMD จะเป็นตัวแจ้งให้เราทราบถึงคำสั่งในตอนแรกที่เราเริ่มรัน Container ซึ่งในที่นี้ จะเป็นการสั่งให้ Container เรียกใช้ Python Script ที่เรียกว่า converter.py
 
มาถึงตรงนี้ เราต้องสร้าง Script นั่นก่อน ซึ่งก็ต้องใช้โปรแกรมที่สามารถบันทึกไฟล์ Raw Text โดยไม่มี Formatting (แนะนำว่าให้ใช้ Sublime Text, มันเป็นโปรแกรมประเภทอิดิเตอร์ที่ใช้สำหรับเขียนโค้ดโปรแกรม มันช่วยคุณได้) ป้อนข้อมูลตามนี้ :
 

print ("Welcome to the Weight Converter")
 
#get pounds
 
pounds = input("Enter the number of pounds:")
 
kilograms = pounds * 0.45359237
 
print ("That's {} kilograms.".format(kilograms))
 
นี่คือโปรแกรมแปลงน้ำหนักอย่างง่ายที่จะดำเนินการผ่านบรรทัดคำสั่ง
 
เราต้องสร้าง Docker Image โดยใช้ Dockerfile ตามนี้ :
 

docker build -t converter .
 
นี่จะเป็นการบอกให้ Docker ทำตามคำแนะนำใน Dockerfile เรามุ่งความสนใจไปที่ไฟล์นี้โดยการระบุ Current Directory ด้วยสัญลักษณ์ '.' และเราก็ยังติดแท็ก Resulting Image ด้วย Name Converter ซึ่งจะทำให้ง่ายในการติดตาม
 
ในขั้นตอนนี้ เราสามารถเรียกใช้ด้วยคำสั่ง:
 

docker run -it converter
 
ผลลัพธ์ควรเป็นกล่องโต้ตอบบรรทัดคำสั่งกับคอมพิวเตอร์ของคุณ ซึ่งจะแปลงน้ำหนักที่มีค่าเป็นปอนด์ของคุณให้เป็นกิโลกรัมอย่างสนุกสนาน ก่อนที่จะออกจากใช้งาน
 
เราหวังว่าบทความนี้ช่วยให้คุณรู้อย่างคร่าวๆ ว่าคุณสามารถทำอะไรได้บ้างกับ Docker หรือคุณสามารถสร้าง Images ซ้อนกันเป็น Layer ในขณะที่ยังคงทำงานอยู่ และยังสามารถเปิดเผยเว็บอินเตอร์เฟส (Web Interfaces) บนพอร์ตที่คุณเลือกได้อีกด้วย นอกจากนี้ คุณก็ยังสามารถใช้ Docker Compose เพื่อรวบรวมกลุ่มของ Container ที่ทำงานร่วมกันอย่างสอดคล้องเพื่อสร้างแอปพลิเคชั่นที่ใหญ่กว่า ยกตัวอย่างเช่น Web Application ที่พูดคุยกับฐานข้อมูล เป็นต้น


ที่มา: https://bit.ly/2CEfoiO
ควิกเซิร์ฟ
สินค้า
งานระบบ
บริการ
กิจกรรม
ออนไลน์