มาปูพื้นฐาน Docker กัน
Docker ถูกสร้างมาเพื่อแก้ปัญหาการ Install ของ Software ที่ยุ่งยาก อยากเช่นเราจะโหลดซักโปรแกรมมาใช้แต่โปรแกรมนั้นต้องติดตั้งหลายสิ่งหลายอย่างกว่าเราจะเริ่มใช้โปรแกรมนั้นได้ แถมบางโปรแกรมยังติดเรื่อง OS แต่ถ้าเราโหลด Docker มาเองแล้วก็ Run Docker ต่างๆ ที่มีคนทำไว้ เราก็จะไม่ยุ่งยากสำหรับการติดตั้งเลย และ เรายังสามารถสร้าง Docker Container เองเพื่อนำไปใช้หรือให้คนอื่นใช้ได้อีกด้วย เพราะตัว Docker สามารถติดตั้งได้ทุกระบบโดยไม่ต้องมีส่วนของ OS เข้ามาเกี่ยว เช่น Window/Mac/Linux แต่จะมีเจ้าตัว Mac M1 เข้ามาซึ่ง Docker กำลังแก้ไขให้ใช้ได้ในเร็วๆนี้ ตอนนี้น่าจะอยู่ในช่วงพัฒนา
มาดู FLOW ของการทำงานของ APP กัน
หลักการทำงานของ APP บน Computer หลักๆก็ เรา Run APP หรือทำอะไรซักอย่างนึงมันก็จะไปบอก KERNEL ซึ่ง KERNEL มีหน้าที่ไปจัดการแบ่งทรัพยากรณ์ต่างๆภายในเครื่องเรา ไม่ว่าจะไปแบ่ง RAM CPU การ์ดจอ และต่างๆ ที่เป็น Hardware ในเครื่องเราให้ APP ทำงานได้อย่างเหมาะสม
ซึ่งจะเห็นว่าหลักการทำงานของ APP มันก็มีแค่นี้ แต่เรา Run APP บาง APP ไม่ได้ ติดตั้งตั้ง Program ต่างๆไม่ได้ ซึ่งมันก็ไม่แปลกครับ เพราะบาง APP ก็ไม่ได้ออกแบบให้ใช้ได้ทุก OS หรือ แม้กระทั้งบาง APP ต้องติดตั้งหลายอย่างมากกว่าจะใช้งานมันได้ ซึ่ง Docker เอามาแก้ปัญหานี้แหละ มาจำลองโปรแกรมต่างๆบน OS ของเรา ซึ่งจริงๆสายเขียนโปรแกรมอย่าเรียกว่าจำลองดีกว่า เรียกว่าเอามาใช้จริงๆดีกว่าครับ 55555
ซึ่งเจ้าตัว Docker Container มันถูกสร้างมาจาก Docker Image อีก ที Docker Image ก็คือ ตัว APP เราที่ถูกติดตั้งสิ่งที่จำเป็นไว้ในนั้นหมดแล้ว ยกตัวอย่าง Netbeans จะต้องติดตั้ง JAVA ด้วย ตัว Image ก็จะมี OS ที่ต้องใช้+Netbeans+JAVA+คำสั่ง Run APP ต่างๆอยู่ข้างใน และเราก็เอามาสร้างเป็น Container ซึ่ง Image อันเดียวเราจะเอาไปสร้างกี่ Container ก็ได้ซึ่งเจ้าตัว Image เราจะไม่สามารถแก้ไขมันได้ แต่เราสามารถเข้าไปแก้ไขข้างใน Container แต่ละอันได้โดย Container ที่ถูกแก้ไขจะไม่กระทบกับ Container อื่นๆ
ก่อนอื่นเราก็โหลด Docker Cli มาลงเครื่องกันเลย https://www.docker.com/ หลังจากสมัครแล้ว Download และติดตั้งเรียบร้อย
ก็สามารถไปดูว่า https://hub.docker.com/ มี Image อะไรให้ลองเล่นบ้าง Docker Hub คือ Docker Image ที่ถูกคัดมาจาก Docker อีกทีว่ามันดีและควรได้รับชื่อที่เป็น primary ที่สวยงาม ผมจะลองเล่นเจ้าตัว Redis ดูนะครับ Redis คืออะไรผมจะอธิบายสั้นๆ คือ ฐานข้อมูลแบบ NoSQL ON Memory ซึ่งมันเร็วมากๆ แต่ไม่ได้เหมาะกับเป็นฐานข้อมูลหลักนะครับสามารถหาอ่านเพิ่มเติมได้เลยครับ
ลองมามาเริ่มกันเลยครับ หลังจากติดตั้งอะไรเสร็จหมดแล้ว
docker run redis
ตอนนี้เรา run image name ที่ใช้ชื่อว่า redis จะได้หน้าตาออกมาประมาณนี้ แต่ถ้าใครไม่เคยติดตั้งหน้าตาจะเป็นอีกแบบนะครับแต่สุดท้ายจะออกมาเหมือนกัน เพราะเรา run ครั้งแรกมันหา image ไม่เจอมันจะไป pull มาจาก docker hub
หลังจากนั้น Ctrl+c ออกมา
docker ps
เป็นคำสั่งว่าตอนนี้เรากำลัง Run Docker Container อะไรอยู่ซึ่งก็ต้องมีแหละเราพึ่งจะ Run ไป
docker exec -it contaner_id sh
เราก็จะสามารถเข้าไปใน container นั้นๆได้ ซึ่งหน้าตาคุ้นๆไหมครับ ตัว Docker เองมันถูกสร้างบน Linux ทั้งหมด เราสามารถใช้คำสั่ง Linux ได้หมดเลย
อย่างตัวอย่างผมก็ทำการ echo เล่นดู และใช้คำสั่ง redis-cli ซึ่งคำสั่ง redis มีอยู่ไม่มากครับอันนี้ผมยกตัวอย่าง set ค่ากับ get value และทำการออก ออกจากคำสั่ง redis-cli ด้วย Ctrl + c และ ออกจาก ตัว Docker Container ด้วยคำสั่ง exit หรือ Ctrl + d เหมือนเราอยู่บน Linux จริงๆ เพราะตัวจำลอง Linux มันถูกติดตั้งมาพร้อมกับตัว Docker ของเราตอนที่เรา Install ลงเครื่อง
docker stop contaner_id , docker kill contaner_id
หลังจากนั้นเรามาหยุด Container ดู stop ก็เหมือน shutdown ส่วน kill เหมือนกดปุ่มเปิดปิดเครื่องค้างไว้ คือดับทันที
หลังจากนั้นเราก็จะไม่มี container อะไรต่อไปอีก
แต่เราก็ยังสามารถดูประวัติสิ่งที่เรา Run ไว้ทั้งหมดได้นะครับ
docker ps -all
และก็ Clear ได้ทั้งหมดเช่นกัน
docker system prune
เท่านี้ก็ถูก Clear ออกไปหมดแล้วจริงๆสะอาดขาวไม่รกพื้นที่ในคอมเราแล้ว
บทความนี้เป็นการเตรียมความพร้อมและความเข้าใจของตัว Docker ก่อนที่เราจะไปทำ Dockerfile และ Docker Image เอง บทความหน้าเรามาทำ Dockerfile ด้วยตัวเองกันครับ
บทความเกี่ยวกับการสร้าง Dockerfile แบบ Basic
บทความเกี่ยวกับ Docker Compose แบบ Advance
( CR. ธำรงค์ ไชยวงค์ )