Docker : jupyter/datascience-notebook

20 Apr

ตอนนี้ผมให้ความสนใจเรื่อง Data Science ค่อนข้างมากและใช้เวลาในการศึกษาค่อนข้างมากเลยก็ว่าได้ครับ

สำหรับการศึกษาเรื่อง Data Science โดยใช้ภาษา Python บวกกับ Jupyter notebook สำหรับการ Analyze และ Virtualize Data นั้นเดี๋ยวค่อยกลับมาว่ากันอีกครั้งหนึ่ง

แต่ตอนนี้หลังจากเริ่มศึกษาและลงมือปฏบัติไปได้ระดับหนึ่งแล้ว จนมาถึงเรื่องที่เริ่มจะวางแผนเขียน Shot-course เพื่อสำหรับจัดการอบรมให้ผู้ที่สนใจ สิ่งหนึ่งที่ต้องตะหนักคือเรื่องการจัดสภาพแวดล้อมของการทำงานต่าง ๆ ให้เหมาะสมและที่สำคัญต้องง่ายต่อการใช้งานโปรแกรม ตลอดจนโมดูลต่าง ๆ ที่จำเป็น

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

ก่อนที่จะเลยไปถึงการสร้าง Shot-course สำหรับการจัดการอบรมให้กับผู้สนใจหน้าใหม่นั้น โจทย์สำคัญคือการหา Solution สำหรับแก้ปัญหาเรื่องการจัดการสภาพแวดล้อมในการทำของโปรแกรมให้ง่ายที่สุดก่อน

และคำตอบที่ดีที่สุดสำหรับเรื่องนี้คือ Docker นั้่นเอง และจากการสำรวจเบื้องต้นนั้นพบว่ามี Images สำหรับ Data Science พร้อมให้ใช้งานอยู่แล้ว อาทิ continuumio/anaconda3 หรือ jupyter/datascience-notebook 

ผมหรับงานนี้ผมเลือกใช้ Image ของ jupyter/datascience-notebook ซึ่งมีขนาดประมาณ 5Gb มาใช้งาน

โดยการดึง Image จาก Repo มีดังนี้

$ docker pull jupyter/datascience-notebook

จากนั้นทำการสร้าง Container จาก Image โดย

$ docker run -it --rm \
    --name datascience
    -p 8888:8888 jupyter/datascience-notebook

โดยเมื่อทำการ inspect ดูรายละเอียดของ Image นี้พบว่าผู้สร้างทำการชี้ Workspace ไว้ที่ /home/jovyan ซึ่งเมื่อเราทำงานผ่าน Jupyter notebook บน Container นั้นทำให้ไม่สามารถบันทึกไฟล์ notebook ที่เราสร้างขึ้นได้

ดังนั้นเพื่อให้การจัดการไฟล์ต่าง ๆ ง่ายขึ้น และให้การสื่อสารข้อมูลระหว่าง Host และ Contrainer เป็นได้ง่ายตลอดจนสามารถบันทึกไฟล์โปรแกรมที่เราสร้างขึ้นไว้บน Host แทนที่จะเก็บไว้ใน Contrainer ผมจึงจัดการปัญหาเหล่านี้โดยการสร้าง Docker Volume ซึ่ง Blind เข้ากับ local directory ของ Host จากนั้นค่อย Mount เข้าไปกับ Container นั้น

โดยการสร้าง Docker Volume ทำได้ดังนี้

$ docker volume create \
    --name datascience \
    --opt type=none \
    --opt device=/Users/phisan/ResearchCode/NoteBook \
    --opt o=bind
$ docker volume ls

DRIVER              VOLUME NAME
local               datascience

ดูรายละเอียดของ Volume ที่เราสร้างขึ้น

$ docker volume inspect datascience

[
    {
        "CreatedAt": "2018-04-20T05:22:41Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/datascience/_data",
        "Name": "datascience",
        "Options": {
            "device": "/Users/phisan/ResearchCode/NoteBook",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]

จากรายละเอียดด้านบนจะเห็นว่า Volume ที่ชื่อว่า datascience นั้นจะเชื่อมกับ local directory บน Host คือ

"device": "/Users/phisan/ResearchCode/NoteBook"

จากนั้นก็มาถึงขึ้นตอนที่สำคัญที่สุดคือการสร้าง Container จาก Image โดยการ Mount Docker Volume ที่เราสร้างขึ้นเข้าไปด้วย ซึ่งผมจะ Mount เข้าไปยังตำแหน่ง Workspace ที่ผู้สร้าง DataScience Image นี้กำหนดไว้คือ /home/jovyan

$ docker run -it --rm \
    --name datascience \
    -p 8888:8888 \
    -v datascience:/home/jovyan \
    jupyter/datascience-notebook

ถือว่าเป็นอันเสร็จสิ้นครับ

Screen Shot 2561-04-20 at 14.42.12

Social Comments

Loading Disqus Comments ...
Loading Facebook Comments ...