本文的部署环境是Ubuntu 14.04

  • Docker

Docker 详细概念可以去search,简单来说就是把应用打包到一个容器里的轻量级系统虚拟化服务

  • IPython Notebook

IPython Notebook 既是一个交互计算平台,又是一个记录计算过程的「笔记本」。它由服务端和客户端两部分组成,其中服务端负责代码的解释与计算,而客户端负责与用户进行交互。 服务端可以运行在本机也可以运行在远程服务器,包含负责运算的 IPython kernel (与 QT Console 的 kernel 相同) 以及一个 HTTP/S 服务器 (Tornado)。 而客户端则是一个指向服务端地址的浏览器页面,负责接受用户的输入并负责渲染输出。

本文主要记录使用Docker 在服务器部署IPython Note 应用的过程。比传统的部署方案果然简单轻松不少。

知识点

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

Docker 的基本概念

下文的操作主要涉及Docker的一下几个知识点:

  • Docker 的镜像(image)、容器(container)、仓库(registerie)
  • Docker 的安装
  • Docker 的基础用法
  • Docker的端口映射
  • Docker 数据卷
  • 链接容器

详细的信息可以自行搜索

部署IPython

下载IPython 的镜像

官方Docker镜像地址,里面包含5个镜像:

  • 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 第一次撰写

最新文章

  1. 总结common-dbutils.jar
  2. XListView
  3. java中的堆内存和栈内存
  4. PCL—低层次视觉—点云滤波(初步处理)
  5. Unity3D 自动打包整个项目(以AssetBundle实现)
  6. 007 字符串(keep it up)
  7. 教你一步一步部署.net免费空间OpenShift系列之四------绑定域名、使用CDN加速
  8. CSS选取第n个标签元素
  9. [shell] if语句用法
  10. 使用ArcMap做一个1:5000标准分幅图并编号
  11. go标准库的学习-path/filepath
  12. 【Codeforces 339】Xenia and Bit Operations
  13. Node.js API快速入门
  14. js 表达式与语句
  15. 关于移动端及flex
  16. 【轨迹动画css】不规则轨迹动画css教程,弹球,客服广告悬浮层都可以用
  17. 【Android】Could not find XXX.apk!的解决方法
  18. P1091 合唱队列
  19. Sublime Text 3新建工程
  20. nRF52832 BLE_DFU空中升级OTA(一)安装软件(SDK14.2.0)

热门文章

  1. Stm32F103面向对象编程之GPIO
  2. UVA 12063 Zeros and Ones(三维dp)
  3. 51 Nod 1091 线段的重叠
  4. java的时间获取
  5. Memcached append 命令
  6. JavaScript 获取对象属性和方法
  7. 数组中的k个最小值
  8. hand first python 选读(2)
  9. spring mvc: xml练习
  10. js排序算法03——选择排序