概述
最近由于业务的需求,要build一个jupyter的image来提供服务,因为docker的轻量化可以很方便的迁移。下面来介绍一下我所做的操作,以及我踩的坑:
首先来安装anaconda,有python2和3版本的,版本不同但是build的过程是一样的,有两种方式,第一种,你可以通过Dockerfile的方式来build image,但是在运行Anaconda2-5.0.1-Linux-x86_64.sh脚本的时候无法实现交互,所以,我才用了docker commit的方式来执行,但是事实证明也可以通过Dockerfile的方式来build,您只需要在本机上先运行了Anaconda2-5.0.1-Linux-x86_64.sh的脚本,并将生成的文件夹就是anaconda2 ADD到image中相应的位置,并且修改环境变量,将PATH加进去即可。下面以python2为例来说:
1. 从anaconda官网上下载运行脚本Anaconda2-5.0.1-Linux-x86_64.sh,其中在下载的时候要注意你的系统的是32位还是64位。
2. 将脚本scp到基础镜像中,安装解压指令bzip2
yum install bzip2
3. 运行脚本(一路输入yes)
sh Anaconda2-5.0.1-Linux-x86_64.sh
4. 更新anaconda
conda update anaconda
5. 安装jupyter
conda install jupyter
6. 创建登录密码
root@localhost ~]# ipython
Python 3.5.2 (default, Aug 4 2017, 02:13:48)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4'
7. 生成配置文件
jupyter notebook --generate-config --allow-root
注意:在这一步的时候有可能会遇见编码错误:UnicodeEncodeError:'ascii'codec can't encode characters in position...
处理的方法是:在anaconda2文件夹中的lib>python2.7>site.py更改:
if 0:
# Enable to support locale aware default string encodings.
import locale
loc = locale.getdefaultlocale()
if loc[1]:
encoding = loc[1]
#将上述代码段中if后面的0改成1,保存,重新启动anaconda。
8. 修改配置文件:
vi ~/.jupyter/jupyter_notebook_config.py
添加以下内容:
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:5311cd8b9da9:70dd3321fccb5b5d77e66080a5d3d943ab9752b4' #注意这里的密钥是刚刚生成的那个
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口,使用默认8888也可以
9.保存镜像
docker commit 容器ID 镜像名称
10. 启动images提供服务:
docker run --privileged -d -p 8889:8888 -v /sys/fs/cgroup:/sys/fs/cgroup --name jupyter jupyter2:v2 /usr/sbin/init
注意:centos7有一个大坑,就是你在关闭防火墙的时候,systemctl 无法使用,报错: Failed to get D-Bus connection : Operation not permitted
所以要用init来起,在Dockerfile中可以用CMD来使运行时启动。
11. 进入docker image
docker exec -it jupyter /bin/bash
12.关闭防火墙
systemctl stop firewalls.service
13. 启动jupyter
jupyter notebook --notebook-dir=/root/ --allow-root
14.在浏览器输入服务器的IP+映射的端口号即可访问,完成
最后
以上就是忧郁蜗牛为你收集整理的如何将anaconda+jupyter build成docker镜像的全部内容,希望文章能够帮你解决如何将anaconda+jupyter build成docker镜像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复