มาสนุกกับการใช้งาน Docker สำหรับ Data Science กัน

มาสนุกกับการใช้งาน Docker สำหรับ Data Science กัน

19 กุมภาพันธ์ 2564

เมื่อพูดถึงโปรแกรมสำหรับการจัดการ packages ต่าง ๆ สำหรับงาน Data Science ทุกคนก็คงจะนึกถึงเจ้า งูยักษ์ของเรา นั้นก็คือ “Anaconda” นั้นเอง 

anaconda-logo
ขอบคุณโลโก้จาก (Anaconda)

เจ้า Anaconda นี้แหละคือผู้ที่คอยจัดการ packages ต่าง ๆ สำหรับงานในด้าน Data Analytics, Deep Learning และ Data Visualization เป็นต้น ถ้าใครเคยจับงานด้านพวกนี้ โดยไม่มีเจ้าตัว Anaconda ก็จะรู้ว่า โอโห้ !!  มันช่าง install เยอะซะเหลือเกินและยังน่าปวดหัวอีกต่างหาก เพราะเจ้า Anaconda ตัวนี้ที่เป็นลูกมือ ค่อย install packages ต่าง ๆ ให้เรา ที่สำคัญยังสามารถสร้าง virtual environment ขึ้นมาและยังแยกออกจาก physical environment อีกด้วยทีนี้ก็สบายใจได้เลยกับการพัฒนางานต่าง ๆ ตามที่เราต้องการได้อย่างเต็มที่  

เอาละ พูดถึงข้อดีมาก็เยอะแล้วนะครับ แต่เจ้า Anaconda ก็ยังมีปัญหากวนใจเล็กน้อยเหมือนกันคือ เรามักจะเจอว่าบางที ที่เรา ติดตั้ง package python บางตัวแล้วดันไปอ้างอิงถึง package python ตัวอื่น ๆ ที่เป็น version เฉพาะสำหรับ package python นั้น ๆ  ทำให้ไม่สามารถติดตั้งได้หรือต้องถอยไปติดตั้ง version ที่ เข้ากันได้กับ environment ของเรา  นั้นก็เป็นปัญหาหนึ่งที่ใครหลายคนอาจจะเจอกันมาบ้างแล้ว ซึ่งบอกได้เลยว่าปวดหัวกันเลยทีเดียว ฮ่า ๆ ยิ่งถ้า เผลอไปใช้คำสั่งอัพเดท conda update conda หรือ conda update anaconda นะครับ อาจจะปวดหัวยิ่งกว่าเดิมแน่นอน 

แล้วถ้า project นี้เราไม่ได้ทำแค่คนเดียวละ จะเกิดอะไรขึ้น …. ถูกต้องแล้วครับ เอ๊ะ ยังไม่ได้ตอบเลย !! ความสนุกเกิดขึ้นแน่นอนครับ เพราะแต่ละคนก็มีความถนัดกันหลากหลาย ไม่ว่าจะเป็น บางคนชอบใช้ Windows บางคนชอบใช้ Linux 

แล้วยังนี้เราจะจัดการยังไงหละเพื่อให้เกิดการพัฒนาร่วมกันได้อย่างสบายใจและมีจุดตรงกลางร่วมกัน ใช่ครับ ก็ให้ทางฝั่ง Linux ติดตั้ง Anaconda ซะสิ จะได้เหมือนกัน ฮ่า ๆ  แต่ ๆ ช้าก่อน ซาร่า เรามี tool มาแนะนำ นั้นก็คือ Docker นั้นเอง แล้ว Docker คืออะไรหละ ? 

Docker คือ ? 

ขอบคุณภาพจาก (Wiki Docker

Docker คือแพลตฟอร์มซอฟต์แวร์ (PaaS) ที่ช่วยสร้าง ทดสอบ และติดตั้งแอปพลิเคชันของเราได้อย่างรวดเร็ว ให้ลองนึกภาพ เราสามารถใส่โค้ด และ packages python ต่าง ๆ ที่เราพัฒนา เข้าไปไว้ในตู้คอนเทนเนอร์ (container) เหมือนภาพ โลโก้ Docker เลย และตัว Docker เองจะมีคอร์หลักของตัวเองชื่อว่า Docker engine สามารถรันอยู่บน OS ได้ทั้ง Windows และ Linux ทำให้การใช้งานง่ายขึ้นโดยการแค่ยกทั้งตู้คอนเทนเนอร์ นั้นมารันบน Docker engine ของเราก็จะใช้งานอย่างมีประสิทธิภาพ ไม่ว่าจะอยู่บน OS ใด ๆ ที่ สนันสนุนการใช้งาน Docker นั้นเอง เท่านี้ก็ไม่มีปัญหากวนใจแน่นอน 

ขอบคุณรูปจาก (What is a Container ?)

ช่วงยกตัวอย่างให้เห็นภาพ นั้นคือ เมื่อเราพัฒนาเว็บเซอร์วิสซึ่งประกอบไปด้วย package python และชุดโค้ดที่พร้อมใช้งานแล้ว เราสามารถ นำสิ่งต่าง ๆ เหล่านี้ใส่ไว้ใน Docker container เพื่อนำไป deploy บน OS ต่าง ๆ ที่รองรับการใช้งาน Docker ได้เลย หรือจะเป็นการใช้ Docker ในการจำลองฐานข้อมูลที่เป็น RDBS หรือ NOSQL สำหรับทดสอบการอ่านและเขียนลงฐานข้อมูล ก็ทำได้เช่นกัน เป็นยังไงหละ เจ้าปลาวาฬสีฟ้า !!   

แล้ว Docker ประกอบไปด้วยอะไรบ้างหละ ? 

Docker Image  

Docker image คือ ตัวต้นแบบในการสร้าง container ซึ่งภายในจะประกอบไปด้วยสิ่งต่าง ๆ ที่บอกว่า container ที่สร้างจาก image นี้ ประกอบไปด้วย package อะไรบ้าง รันอยู่ใน environment แบบไหน เป็นต้น ถ้าให้เปรียบเทียบง่าย ๆ นั้นก็คือ พิมพ์เขียวสำหรับ container แล้ว Docker image มากจากไหนล่ะ  คำตอบก็คือ ตัว Docker นั้นจะมีสิ่งหนึ่งที่เรียกว่า Docker file และเจ้าตัว Docker file นี้หละที่จะเป็นตัวบอก Docker ของเราว่า Docker image นี้ ทำอะไรบ้างนั้นเอง 

Docker Container 

เป็นผลลัพธ์ที่เกิดจาก Docker image เปรียบเสมือนกับตู้คอนเทนเนอร์ ที่ฝังโค้ดและ package ต่าง ๆ ตามที่ Docker image ประกาศไว้ 

ขอบคุณรูปจาก (Docker tutorial

พอเห็นภาพกันบ้างหรือยังครับดูเหมือนเจ้า Docker จะใช้งานง่ายมาก ๆ งั้นเรามาเริ่มเล่น Docker กันเลย 

เริ่มต้นเล่น Docker กัน !! (ในที่นี้ผู้เขียน ติดตั้งบน Windows ครับ) 

เริ่มจากไปที่เว็บ Docker เพื่อ ดาวน์โหลด ตัวติดตั้ง และถ้าใครอยากได้ข้อมูลเพิ่มเติมสามารถเข้าไปดูได้ที่เว็บไซต์ Docker overview  ได้เลย 

รูปภาพจาก (Geting Start Docker)

เมื่อติดตั้งเสร็จแล้วให้เราทดสอบโดย เปิด PowerShell และลองทดสอบโดยการรัน คำสั่งดังต่อไปนี้เพื่อทดสอบการใช้งาน 

> docker run -d -p 80:80 docker/getting-start
ผลลัพธ์การรันผ่าน command line

จากนั้นเข้าไปตรวจสอบว่า Docker container นั้นทำการรันอยู่หรือไม่ โดย เข้าไปที่ Docker Desktop ที่ notification area จะเห็นว่า container เราได้รันอยู่ดังภาพตัวอย่าง 

ตัวอย่างหน้าต่าง บน Docker Desktop

เย้ ตอนนี้เราก็ได้ Docker engine สำหรับรัน container ของเราแล้วครับ จากนี้เราจะมาทำความรู้จักกับ Docker Hub กัน 

Docker Hub คืออะไร? 

Docker Hub เปรียบเสมือนจุดศูนย์รวมของ Docker image ต่าง ๆ จากทั่วโลกที่กลุ่มคนใช้ Docker แชร์ Docker images ที่ตัวเองสร้างขึ้นให้กับคนทั่วไปได้ใช้นั้นเอง เป็นไงยังไงครับ ดูยิ่งใหญ่มาก ฮ่า ๆ เราสามารถเข้าไปดูได้ที่ เว็บไซต์ Docker Hub  

หน้าต่างเว็บไซต์ของ Docker Hub (Docker Hub)

ซึ่งเราสามารถค้นหาชื่อหรือเครื่องที่ใช้ได้เลย อย่างเช่น Tensorflow Jupyter เป็นต้น ซึ่งในบทความนี้เราจะยกตัวการดึง Docker image ของ Jupyter มาใช้กัน 

หน้าต่าง Docker image Jupyternotebook บนเว็บไซต์ Docker Hub

หลังจากที่เราได้ตัว images แล้วให้ทำการดึงลงมาจาก Docker Hub และ รันตัว Docker นั้นโดยใช้คำสั่ง 

# -p คือ การ mapping port จากเครื่องเราไปยัง container <Host-port>:<Container-port>
> docker run -p 8888:8888 jupyter/scipy-notebook:17aba6048f44

เมื่อคำสั่งถูกรัน จะสังเกตได้ว่าจะมี container ถูกรันขึ้นมาหนึ่งตัว และเราสามารถเข้าไปตรวจสอบผลลัพธ์ ได้ที่ http://localhost:8888 ผ่านเว็บบราวเซอร์ กันได้เลยครับ 

หน้าต่างบน Docker Desktop ที่ทำการรัน container แล้ว
หน้าต่างเว็บไซต์จากการรัน container ผ่าน (localhost:8888)

เป็นยังไงกันบ้างครับสำหรับเจ้าตัว Docker ของเราบทความนี้จะเป็นแค่เพียงจุดเริ่มต้นของการใช้งาน Docker สำหรับ Data Science เท่านั้น ถ้าสนใจและอยากรู้ว่า Docker ทำงานอะไรได้อีก ก็อย่างลืมติดตามบทความในตอนหน้านะครับ ขอบคุณครับ 

Data Engineer
Big Data institute (BDI)

แบ่งปันบทความ

กลุ่มเนื้อหา

แท็กยอดนิยม

แจ้งเรื่องที่อยากอ่าน

คุณสามารถแจ้งเรื่องที่อยากอ่านให้เราทราบได้ !
และเราจะนำไปพัฒนาบทความให้มีเนื้อหาที่น่าสนใจมากขึ้น

ไอคอน PDPA

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ “นโยบายคุ้กกี้” และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ “ตั้งค่า”

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่มีความจำเป็น (Strictly Necessary Cookies)
    เปิดใช้งานตลอด

    คุกกี้ประเภทนี้มีความจำเป็นต่อการให้บริการเว็บไซต์ของ สำนักงานคณะกรรมการคุ้มครองข้อมูลส่วนบุคคล เพื่อให้ท่านสามารถเข้าใช้งานในส่วนต่าง ๆ ของเว็บไซต์ได้ รวมถึงช่วยจดจำข้อมูลที่ท่านเคยให้ไว้ผ่านเว็บไซต์ การปิดการใช้งานคุกกี้ประเภทนี้จะส่งผลให้ท่านไม่สามารถใช้บริการในสาระสำคัญของ สำนักงานคณะกรรมการคุ้มครองข้อมูลส่วนบุคคล ซึ่งจำเป็นต้องเรียกใช้คุกกี้ได้
    รายละเอียดคุกกี้

  • คุกกี้เพื่อการวิเคราะห์และประเมินผลการใช้งาน (Performance Cookies)

    คุกกี้ประเภทนี้ช่วยให้ BDI ทราบถึงการปฏิสัมพันธ์ของผู้ใช้งานในการใช้บริการเว็บไซต์ของ BDI รวมถึงหน้าเพจหรือพื้นที่ใดของเว็บไซต์ที่ได้รับความนิยม ตลอดจนการวิเคราะห์ข้อมูลด้านอื่น ๆ BDI ยังใช้ข้อมูลนี้เพื่อการปรับปรุงการทำงานของเว็บไซต์ และเพื่อเข้าใจพฤติกรรมของผู้ใช้งานมากขึ้น ถึงแม้ว่า ข้อมูลที่คุกกี้นี้เก็บรวบรวมจะเป็นข้อมูลที่ไม่สามารถระบุตัวตนได้ และนำมาใช้วิเคราะห์ทางสถิติเท่านั้น การปิดการใช้งานคุกกี้ประเภทนี้จะส่งผลให้ BDI ไม่สามารถทราบปริมาณผู้เข้าเยี่ยมชมเว็บไซต์ และไม่สามารถประเมินคุณภาพการให้บริการได้

  • คุกกี้เพื่อการใช้งานเว็บไซต์ (Functional Cookies)

    คุกกี้ประเภทนี้จะช่วยให้เว็บไซต์ของ BDI จดจำตัวเลือกต่าง ๆ ที่ท่านได้ตั้งค่าไว้และช่วยให้เว็บไซต์ส่งมอบคุณสมบัติและเนื้อหาเพิ่มเติมให้ตรงกับการใช้งานของท่านได้ เช่น ช่วยจดจำชื่อบัญชีผู้ใช้งานของท่าน หรือจดจำการเปลี่ยนแปลงการตั้งค่าขนาดฟอนต์หรือการตั้งค่าต่าง ๆ ของหน้าเพจซึ่งท่านสามารถปรับแต่งได้ การปิดการใช้งานคุกกี้ประเภทนี้อาจส่งผลให้เว็บไซต์ไม่สามารถทำงานได้อย่างสมบูรณ์

  • คุกกี้เพื่อการโฆษณาไปยังกลุ่มเป้าหมาย (Targeting Cookies)

    คุกกี้ประเภทนี้เป็นคุกกี้ที่เกิดจากการเชื่อมโยงเว็บไซต์ของบุคคลที่สาม ซึ่งเก็บข้อมูลการเข้าใช้งานและเว็บไซต์ที่ท่านได้เข้าเยี่ยมชม เพื่อนำเสนอสินค้าหรือบริการบนเว็บไซต์อื่นที่ไม่ใช่เว็บไซต์ของ BDI ทั้งนี้ หากท่านปิดการใช้งานคุกกี้ประเภทนี้จะไม่ส่งผลต่อการใช้งานเว็บไซต์ของ BDI แต่จะส่งผลให้การนำเสนอสินค้าหรือบริการบนเว็บไซต์อื่น ๆ ไม่สอดคล้องกับความสนใจของท่าน

บันทึกการตั้งค่า
ไซต์นี้ลงทะเบียนกับ wpml.org ในฐานะไซต์พัฒนา สลับไปยังไซต์การผลิตโดยใช้รหัส remove this banner.