Docker部署IPython

本文的部署环境是Ubuntu 14.04
- Docker
Docker 详细概念可以去search,简单来说就是把应用打包到一个容器里的轻量级系统虚拟化服务
- IPython Notebook
IPython Notebook 既是一个交互计算平台,又是一个记录计算过程的「笔记本」。它由服务端和客户端两部分组成,其中服务端负责代码的解释与计算,而客户端负责与用户进行交互。 服务端可以运行在本机也可以运行在远程服务器,包含负责运算的 IPython kernel (与 QT Console 的 kernel 相同) 以及一个 HTTP/S 服务器 (Tornado)。 而客户端则是一个指向服务端地址的浏览器页面,负责接受用户的输入并负责渲染输出。
本文主要记录使用Docker 在服务器部署IPython Note 应用的过程。比传统的部署方案果然简单轻松不少。
知识点
- Docker 的基本概念
- 部署IPython 容器
- 使用Nginx 容器反向代理IPython
Docker 的基本概念
下文的操作主要涉及Docker的一下几个知识点:
- Docker 的镜像(image)、容器(container)、仓库(registerie)
- Docker 的安装
- Docker 的基础用法
- Docker的端口映射
- Docker 数据卷
- 链接容器
详细的信息可以自行搜索
部署IPython
下载IPython 的镜像
官方Docker镜像地址,里面包含5个镜像:
- notebook
- ipython
- scipyserver
- scipystack
- nbvierer
简单说一下这几个镜像的区别 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
运行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
运行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 第一次撰写
Docker部署IPython的更多相关文章
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- 程序开发使用docker部署
我们公司自己研发了一套 grand-line 系统,使用 docker 来部署项目. 我是第一批小白鼠,一开始网络差,build 一次要半个小时,连接进入 web shell 也很慢,部署一个微信项目 ...
- 我使用celery以及docker部署遇到的问题
首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...
- Docker部署SDN环境
2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...
- 在生产环境使用Docker部署应用
导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...
- Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...
- NET Core Docker部署
NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...
- 我使用 Docker 部署 Celery 遇到的问题
问题1 - Sending due task 本机测试时没有问题的,但是在线上 docker 中,任务一直显示 "Sending due task".超时的任务是 Django O ...
随机推荐
- scrapy之Pymongo
用Pymongo保存数据 爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中. items.py class DoubanspiderItem( ...
- spark SQL学习(案例-统计每日uv)
需求:统计每日uv package wujiadong_sparkSQL import org.apache.spark.sql.{Row, SQLContext} import org.apache ...
- mysql创建数据库和用户
create database sonar character set utf8 collate utf8_general_ci; flush privileges; grant all privil ...
- hadoop系统的端口
hadoop系统部署时用到不少端口.有的是Web UI所使用的,有的是内部通信所使用的,有的是监控所使用的.实际系统中可能用于防火墙的端口设计.一些内部通信用的端口可能也需要外部能访问.如两个集群的数 ...
- WinCE数据通讯之Web Service篇
准备写个WinCE平台与数据库服务器数据通讯交互方面的专题文章,今天先整理个Web Service通讯方式. 公司目前的硬件产品平台是WinCE5.0,数据通讯是连接服务器与终端的桥梁,关系着终端的数 ...
- 查看linux 之mysql 是否安装的几种方法
转自:https://jingyan.baidu.com/album/86112f1378bf282737978730.html?picindex=2 linux下怎么启动mysql服务 https: ...
- 在 Spark 中使用 IPython Notebook
本文是从 IPython Notebook 转化而来,效果没有本来那么好. 主要为体验 IPython Notebook.至于题目,改成<在 IPython Notebook 中使用 Spark ...
- MySQL索引最左原则
通过实例理解单列索引.多列索引以及最左前缀原则 实例:现在我们想查出满足以下条件的用户id: 因为我们不想扫描整表,故考虑用索引. 单列索引: ALTER TABLE people ADD INDEX ...
- 关于Spring中applicationContext.xml配置错误“org/springframework/transaction/interceptor/TransactionInterceptor”的问题解决
问题描述: 在配置spring的applicationContext.xml中的默认事务管理器的时候可能会出现这样的错误: Error occured processing XML 'org/spri ...
- 【三小时学会Kubernetes!(一) 】容器简介及为每个服务创建镜像
容器是什么 Kubernetes 是容器管理平台.可想而知我们需要容器去管理它们.但是容器是什么?Docker 官方文档的最佳答案如下: 容器映像是轻量级的.独立的.可执行软件包,包含所有可运行的东西 ...