把jupyter-notebook裝進docker裏

jupyter-notebook是我很喜歡的工具,搭環境稍顯麻煩,其實jupyter web形式的使用方式,最好的部署方式是在雲上,一次部署到哪裏都可以使用,豈不快哉。現在各家雲服務器還挺貴的,docker出來後,我就琢磨把jupyter-notebook放到容器中。

Docker及系統

已經安裝好的同學可以忽略這一節。我喜歡用ubuntu,所以host 系統是ubuntu,docker容器中的系統也是ubuntu。ubuntu apt-get源默認按裝的docker版本不是最新版本的,需要通過添加源的方式來安裝最新版本的docker。參考鏈接

#添加ubuntu apt 的https訪問能力
$ sudo apt-get install apt-transport-https

#將Docker官方資料庫的訪問Key添加到你本地系統
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

#將docker 資料庫地址添加到apt源列表
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

#安裝
$ sudo apt-get update
$ sudo apt-get install lxc-docker

Docker安裝好以後就要拉一個ubuntu版本鏡像,我拉的是ubuntu:14.04

docker pull ubuntu:14.04

啓動容器

容器是存放jupyter-notebook的地方,我們要做的是基於精簡版的ubuntu鏡像啓動一個容器,然後在裏面安裝sshd這種遠程登錄的工具。
先讓容器以交互式虛擬終端的方式啓動,如果需要使用和host不同的DNS server配置,可以使用--dns參數指定DNS server,否則新啓動的docker 容器會複製host的/etc/resolv.conf。

docker run -i -t ubuntu:14.04 /bin/bash

安裝sshd的過程比較簡單,我通常安裝openssh-server

sudo apt-get install openssh-server

然後編輯它的配置文件 /etc/ssh/sshd_config,註釋掉配置文件中的"PermitRootLogin without-password",再增加一句"PermitRootLogin yes"使得root用戶可以遠程登錄。然後用將這個安裝好sshd的容器做成鏡像。
之後基於新鏡像啓動容器,用端口映射的方式,映射ssh端口到host,之後通過ssh指定端口的方式登錄到docker 容器。jupyter-notebook的默認端口號是8888,也可以提前考慮,在這裏多映射幾個外部端口。

docker run -d -p 30001:22 --name jupyter-notebook ubuntu:14.04-sshd /usr/sbin/sshd -D

安裝jupyter

這個過程基本和在ubuntu系統上安裝jupyter的過程是一樣的,但容器中的ubuntu是個最簡環境,沒有安裝python-dev包。

#更新apt-get環境
apt-get update

#安裝python dev包
apt-get install python-dev

#安裝jupyter
pip install jupyter

安裝過程需要注意的是,由於牆的原因,ubuntu的源和pip的源都換成國內的源,我ubuntu用的是網易的源,pip用的是清華的源。

使用jupyter

jupyter 默認只能通過本地地址訪問,要放開配置,允許jupyter遠程訪問。在放開遠程訪問時,需要設置密碼,jupyter的配置文件只支持加密後的密文密碼(贊一個)

#生成jupyter配置文件,這個會生成配置文件.jupyter/jupyter_notebook_config.py
jupyter notebook --generate-config

#使用ipython生成密碼
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:38a5ecdf288b:c82dace8d3c7a212ec0bd49bbb99c9af3bae076e'

#去配置文件.jupyter/jupyter_notebook_config.py中修改以下參數
c.NotebookApp.ip='*'                          #綁定所有地址
c.NotebookApp.password = u'剛纔生成的密碼'
c.NotebookApp.open_browser = False            #啓動後是否在瀏覽器中自動打開
c.NotebookApp.port =8888                      #指定一個訪問端口,默認8888,注意和映射的docker端口對應

配置完成以後,就可以用 jupyter notebook命令把jupyter啓動起來了,然後你就可以看到一個超級簡潔的jupyter登錄界面了。輸入密碼就可以開始使用jupyter了。

clipboard.png

擴展

如果要大數據分析,還需要安裝很多大數據相關的包。
我用jupyter最多的還是使用pandas/scikit-learn,所以我會繼續安裝這兩個包,大家可以根據自己需要繼續安裝自己想要的python包。

#安裝numpy,安裝過程中會有c文件的編譯,可能會報些錯,但不影響最終結果
pip install numpy

#安裝scipy,安裝過程中會有c文件的編譯,可能會報些錯,但不影響最終結果
pip install scipy

#安裝matplotlib
pip install matplotlib

#安裝pandas
pip install pandas
pip install scikit-learn

總體來說pip的包管理還是比較好的,除了numpy、scipy編譯時報的一堆錯誤,整體安裝過程比較順暢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章