Docker部署IPython

docker

本文的部署環境是Ubuntu 14.04html

  • Docker前端

    Docker 詳細概念能夠去search,簡單來講就是把應用打包到一個容器裏的輕量級系統虛擬化服務python

  • IPython Notebooknginx

    IPython Notebook 既是一個交互計算平臺,又是一個記錄計算過程的「筆記本」。它由服務端和客戶端兩部分組成,其中服務端負責代碼的解釋與計算,而客戶端負責與用戶進行交互。 服務端能夠運行在本機也能夠運行在遠程服務器,包含負責運算的 IPython kernel (與 QT Console 的 kernel 相同) 以及一個 HTTP/S 服務器 (Tornado)。 而客戶端則是一個指向服務端地址的瀏覽器頁面,負責接受用戶的輸入並負責渲染輸出。git

本文主要記錄使用Docker 在服務器部署IPython Note 應用的過程。比傳統的部署方案果真簡單輕鬆很多。github

知識點

  1. Docker 的基本概念
  2. 部署IPython 容器
  3. 使用Nginx 容器反向代理IPython

Docker 的基本概念

下文的操做主要涉及Docker的一下幾個知識點:web

  • Docker 的鏡像(image)、容器(container)、倉庫(registerie)
  • Docker 的安裝
  • Docker 的基礎用法
  • Docker的端口映射
  • Docker 數據卷
  • 連接容器

詳細的信息能夠自行搜索docker

部署IPython

下載IPython 的鏡像

官方Docker鏡像地址,裏面包含5個鏡像:api

  • notebook
  • ipython
  • scipyserver
  • scipystack
  • nbvierer

簡單說一下這幾個鏡像的區別 ipython 是以上幾個鏡像的共同的根鏡像。notebook 提供了一個web的前端。scipystackipython的基礎上安裝了許多科學計算的包(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

運行IPython 容器

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 反向代理 IPython

有兩種方式,一種是使用官方的Nginx,另外一種是使用jwilder / nginx-proxy,後一種方法更加簡單和方便

方式1:nginx

  • 使用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和後面容器鏈接時的別名有關。

  • 運行Nginx容器
$ 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

方式2:nginx-proxy

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
  • 運行ipython 容器
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了。

參考


更新日誌:

  • 2015-6-8 添加配圖
  • 2015-6-6 第一次撰寫
相關文章
相關標籤/搜索