本文的部署環境是Ubuntu 14.04html
Docker前端
Docker 詳細概念能夠去search,簡單來講就是把應用打包到一個容器裏的輕量級系統虛擬化服務python
IPython Notebooknginx
IPython Notebook 既是一個交互計算平臺,又是一個記錄計算過程的「筆記本」。它由服務端和客戶端兩部分組成,其中服務端負責代碼的解釋與計算,而客戶端負責與用戶進行交互。 服務端能夠運行在本機也能夠運行在遠程服務器,包含負責運算的 IPython kernel (與 QT Console 的 kernel 相同) 以及一個 HTTP/S 服務器 (Tornado)。 而客戶端則是一個指向服務端地址的瀏覽器頁面,負責接受用戶的輸入並負責渲染輸出。git
本文主要記錄使用Docker 在服務器部署IPython Note 應用的過程。比傳統的部署方案果真簡單輕鬆很多。github
下文的操做主要涉及Docker的一下幾個知識點:web
詳細的信息能夠自行搜索docker
官方Docker鏡像地址,裏面包含5個鏡像:api
簡單說一下這幾個鏡像的區別 ipython
是以上幾個鏡像的共同的根鏡像。notebook
提供了一個web的前端。scipystack
在ipython
的基礎上安裝了許多科學計算的包(cython,h5py,matplotlib,numpy,pandas,patsy,scikit-learn,scipy,seaborn,sympy,yt),而scipyserver
則在scipystack
的基礎上提供了web的前端。nbviewer
則是nbviewer.ipython.org的實現
更多詳細信息請到GitHub上的docker-notebook 查看
選擇scipystack
鏡像最省事,可是須要下載的東西也越多。下文選擇的也是scipystack
瀏覽器
$ sudo docker pull ipython/scipyserver
sudo docker run -d --name IPythonApp -p 8888:8888 -e "PASSWORD=your password" -e "USE_HTTP=1" -v /home/zhiyue/repos/ipython-notebook:/notebooks ipython/scipyserver
解析一下參數-d
是之後臺的方式運行,--name
是容器的別名,-p
是端口映射,-e
是設置環境變量,這裏的環境變量PASSWORD
設置成你本身的密碼就能夠了,USE_HTTP=1
意思是使用http,-v
是設置數據卷,把宿主機的目錄掛載到容器裏,即便容器被刪除,數據也能夠保留下來
有兩種方式,一種是使用官方的Nginx,另外一種是使用jwilder / nginx-proxy,後一種方法更加簡單和方便
使用Nginx的官方鏡像nginx
Nginx 配置文件
ipython-server.conf
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server{ listen 80; server_name note.everforget.com; location / { proxy_pass http://ipython:8888; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
這裏面要注意一點是,ipython要使用websock所以要配置websocket,以前在這個問題查了很久。
proxy_pass http://ipython:8888;
ipython
和後面容器鏈接時的別名有關。
$ sudo docker run -d -p 80:80 --name nginx --link IPythonApp:ipython -v `pwd`/config:/etc/nginx/conf.d -v `pwd`/logs:/var/log/nginx nginx
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
sudo docker run -d -e "VIRTUAL_HOST=ipython.everforget.com" --name IPython -p 8888:8888 -e "PASSWORD=xxxxxx" -e "USE_HTTP=1" -v /home/zhiyue/repos/ipython-notebook:/notebooks ipython/scipyserver
最後放一張圖:
這樣就能夠隨時經過web來使用python了。
更新日誌: