考虑将Docker引入数据科学工作


【编者的话】Docker对每个数据科学家来说,是一个部署和共享工作的重要工具。它可以在我的开发过程中重现你所使用的确切环境。

作为数据科学家的一个重要问题是正确配置数据科学环境。有时候,这意味着需要安装大量的软件包、等待软件包编译完成、处理难搞的错误,将所有的一切配置好正常工作......大多数情况下,这是一个痛苦的过程。但正确配置环境对于重现分析并与他人协作是必要的。

出于这些原因,我在数据科学工作中引入了Docker。

什么是Docker?

Docker是一个为软件工程师简化安装过程的工具。以简单的方式来进行解释(对于这个定义,我想对Docker专家说对不起),Docker创建了一个超轻量级的虚拟机,它可以在几毫秒内运行起来,并合理包含工作环境所需的全部内容。

如果您想了解更多信息,请访问Docker官方网站

这篇文章的目标是创建一个非常简单的运行Jupyter notebook的环境。
首先,我们需要安装适配特定平台的Docker。

现在,我们可以开始创造我们的环境。实际上,可以拉取(pull)一个现成的容器。在Docker Hub上,有很多可以使用的镜像。例如:
  • dataquestio/python3-starter
  • dataquestio/python2-starter


但我的目标是从头创建我自己的环境!

打开你最喜欢的文本编辑器,并开始创建Dockerfile。 Dockerfile是一个描述如何构建容器的文件:
# base image

FROM python:3.6

updating repository

RUN apt-get update

copying requirements.txt file

COPY requirements.txt requirements.txt

pip install

RUN pip install --no-cache -r requirements.txt

exposing port 8888

EXPOSE 8888

Running jupyter notebook

--NotebookApp.token='mynotebook' is the passsword

CMD ["jupyter","notebook","--no-browser","--ip=0.0.0.0","--allow-root","--NotebookApp.token='mynotebook'"]

  1. 从一个基于Debian的简单python3镜像开始。
  2. 然后更新所有软件包为最新版本。
  3. 复制requirements.txt,该文件指定了数据科学环境所需的所有Python包。
  4. 执行所有软件包的安装。
  5. 为Jupyter的暴露端口。
  6. 运行命令启动Jupyter notebook。


现在,可以开始写requirements.txt了。该文件描述了我们需要的所有Python软件包,并通过pip来正确安装所有软件包。
bleach==1.5.0
certifi==2016.2.28
cycler==0.10.0
decorator==4.1.2
entrypoints==0.2.3
html5lib==0.9999999
ipykernel==4.6.1
ipython==6.2.1
ipython-genutils==0.2.0
ipywidgets==7.0.3
jedi==0.11.0
Jinja2==2.9.6
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.1.0
jupyter-console==5.2.0
jupyter-core==4.3.0
Markdown==2.6.9
MarkupSafe==1.0
matplotlib==2.1.0
mistune==0.7.4
nbconvert==5.3.1
nbformat==4.4.0
networkx==2.0
notebook==5.2.0
numpy==1.13.3
olefile==0.44
opencv-python==3.3.0.10
pandocfilters==1.4.2
parso==0.1.0
pexpect==4.2.1
pickleshare==0.7.4
Pillow==4.3.0
prompt-toolkit==1.0.15
protobuf==3.4.0
ptyprocess==0.5.2
Pygments==2.2.0
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.2
PyWavelets==0.5.2
pyzmq==16.0.2
qtconsole==4.3.1
scikit-image==0.13.1
scikit-learn==0.19.1
scipy==0.19.1
simplegeneric==0.8.1
six==1.11.0
terminado==0.6
testpath==0.3.1
tornado==4.5.2
traitlets==4.3.2
wcwidth==0.1.7
Werkzeug==0.12.2
widgetsnbextension==3.0.6
pandas>=0.22.0

好的,我们已经准备编译容器。使用如下该命令:
docker build -t your_container_name

使用-t选项,我们可以给容器打标签;例如:
docker build -t mydatascience_env

当构建过程完成后,我们可以运行容器:
docker run -p 8887:8888 -v /path_your_machine/notebook_folder/:/Documents -it datascience_env

使用-v选项,/path_your_machine/notebook_folder/将被装载到Docker容器中,容器内目录为/Documents。

这对保存工作和独立工作环境与notebook很有用。我更喜欢这种方式来组织我的工作,而不是创建一个同时包含环境和笔记本的Docker容器。

当容器启动时,我们可以打开Jupyter网页界面:
http://127.0.0.1:8007

当token被要求输入时,输入'mynotebook',或者也可以设置到dockerfile中,就这些!现在我们可以在新的数据科学环境里工作了。

点击Documents,里面有有我们所有的笔记本!

注意:当容器停止时,每个更改都将被保存。

为了测试这个环境,我使用了在sk-learn网站上创建的DBSCAN的例子。这是链接

当我们的工作完成后,我们可以用命令停止容器:
docker  stop datascience_env

我认为Docker对开发者、数据科学家都是非常重要的工具,它可以部署和共享工作。从我的角度来看,Docker最重要的创新是采用了新的方式来正确地重建可以运行我的代码的环境(使用Dockerfile)。通过这种方式,我可以每次准确重现我在开发过程中使用的环境,并且可以与每个人分享这容器。

原文链接:Consider to Introduce Docker to Your Data Science Workflow (翻译:姜俊厚)

0 个评论

要回复文章请先登录注册