用Dockerfile生成镜像
FROM daocloud.io/ubuntu
RUN apt-get update
ADD Anaconda3-4.2.0-Linux-x86_64.sh /tmp/
EXPOSE 8888
这里是使用daocloud的ubuntu镜像,国内这个比较快,并且把本地的anaconda文件拷贝到docker里面,因为这个文件比较大,用docker下需要很久,这样下好了拷贝过去比较快。最后暴露8888端口来提供jupyter notebook的服务。
用commit更新镜像
因为安装anaconda时候要有多次选择,直接在Dockerfile里面写不太方便,所以先按照上步建立好镜像,之后再手动安装anaconda,之后退出docker,commit修改。
用安装过anaconda之后的镜像启动jupyter notebook服务
sudo docker run --name myjupyter -d -p 8888:8888 conda-env sh -c "/root/anaconda3/bin/jupyter notebook --ip=172.17.0.2 --no-browser"
conda-env是镜像的名字
注意后面执行命令的地方,要用sh去执行,不能写成类似这种:
sudo docker run --name myjupyter -d conda-env /root/anaconda3/bin/jupyter notebook --ip=172.17.0.2 --no-browser
如果写成这种会导致jupyter的kernel反复重启根本没法用
添加路由
网络拓扑是docker跑在虚拟机里面,docker的ip是172.17.0.2,虚拟机是ubuntu,桥接ip是192.168.181.101,宿主机是windows。
现在要求windows能访问docker提供的jupyter服务,所以需要有到docker的路由。
首先在windows上ping 192.168.181.101,可以通,这说明宿主机到虚拟机网络是ok的;
再在ubuntu上ping 172.17.0.2,可以通,说明虚拟机到docker网络也ok;
但是从宿主机上ping 172.17.0.2 不通,所以需要在宿主机上增加到docker的路由:
route add 172.17.0.2 mask 255.255.255.255 192.168.181.101
这表示到docker的目的ip的网关是192.168.181.101
添加好之后再ping 172.17.0.2,还是不通,原因是ubuntu的防火墙挡住了,所以要关掉:
sudo ufw disable
之后就ok了
最后在windows浏览器上打开172.17.0.2:8888,就可以看见jupyter notebook