前言
数据科学开发环境配置起来让人头疼,会碰到包版本不一致、错误信息不熟悉和编译时间漫长等问题。这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难。而且这也是一个完全不常见的准入门槛。
还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术。本文中我们就要介绍的这种技术名叫Docker。Docker能让开发者简单、快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索。
简介
Docker 最初 dotCloud 公司内部的一个业余项目
Docker 基于 Go 语言
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案
Docker 的基础是 Linux 容器(LXC)等技术
Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器
下面的比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
主要优势为:
更快速的交付和部署 - 容器成为了最小单位
更高效的虚拟化 - 内核级虚拟化
更轻松的迁移和拓展
更简单的管理
基本概念
主要是三个:
镜像(Image)
一个只读的模板,镜像可以用来创建 Docker 容器
可以简单创建或更新现有镜像,或者直接下载使用其他人的
容器(Container)
容器是从镜像创建的运行实例,在启动的时候创建一层可写层作为最上层(因为镜像是只读的)
可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
仓库(Repository)
集中存放镜像文件的场所
最大的公开仓库是 Docker Hub
国内的公开仓库包括 Docker Pool 等
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务
安装
官方网站提供了 Mac, Linux 和 Windows 版本的安装教程。因为我打算使用虚拟机进行安装测试,所以这里主要走 Linux 的安装教程,不过其他的应该大同小异。我的 ubuntu 版本是 14.04 LTS, trusty
Docker 目前只能安装在 64 位平台上,并且要求内核版本不低于 3.10,实际上内核越新越好,过低的内核版本容易造成功能的不稳定。可以通过下面的命令来检查内核版本(两个方式,都可以):
? ?
这里我们按照官网的教程,不使用 apt-get
而是使用 curl
来进行安装。
1、如果没有安装 curl,使用 sudo apt-get update; sudo apt-get install cur
l 来进行安装
2、下载最新的 Docker 包 curl -fsSL https://get.docker.com/ | sh
如果想要以 non-root
用户的角色来使用,请使用 sudo usermod -aG docker parallels
(这里 parallels 是用户名),注意需要注销并重新登录以应用改动
3、验证安装
需要先启用 docker sudo service docker start
然后可以用 docker version
来查看版本
最后使用 docker run hello-world
来测试
版本信息
?成功运行 hello world 的结果
?这之后的部分是课程需求。
我们需要安装 docker machine
和 virtual box
,具体步骤为:
添加源
把这行添加到 /etc/apt/sources.list
文件中 deb http://download.virtualbox.org/virtualbox/debian trusty contrib
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
更新并安装 sudo apt-get update; sudo apt-get install virtualbox-5.0
配置
然后是一些配置,先重设默认的虚拟机
删除原来的默认(如果有的话)docker-machine rm default
创建新的默认虚拟机 docker-machine create --driver virtualbox default
(这一步可能需要等一下,我用的是 Parallel Desktop 11,还需要在虚拟机设置中开启 CPU 虚拟化,主要是支持 vt-x)
然后如果直接在菜单中选择 Virtual Box 的话,就会发现什么都没有,技巧是要在刚才的命令行中输入 virtualbox,然后就可以看到下面的界面:
在 Settings - Network 中选择 Port Forwarding,然后按照如图所示添加记录
这里的 Host Port: 9234 记为 A,Guest Port: 9001 记为 B。然后就可以启动 docker 中老师提供的镜像了:
命令为 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1
(需要下载一段时间,然后再解压一段时间),这里 9001 记为 C,9000 记为 D。
接着就会直接连接到 docker 中的虚拟机,从之后的图中可以看到命令行前面的内容也变化了。然后我们输入命令开启前端
?
不要关现在的终端,开启一个新的终端。用
?进入正在执行的 docker
等待一段时间后,继续走以下命令
?然后可以见到
然后等待一段时间(第一运行需要编译),就可以见到主页面了:
也可以尝试直接 localhost:9001
还记得前面的端口转发吗?这里解释一下:
A,也就是 9234,是用户访问的端口号
B,也就是 9001,我们通过虚拟机的端口转发从 9234 转到了 9001
C,也就是 9001(这个命令中的 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1),是虚拟机继续转发的端口
D,也就是 9000(这个命令中的 docker run -it -p 9001:9000 cmusvsc/apachecmda:1.1),是 Docker 容器中接收请求的端口。
也就是说,B 和 C 一定要一样,A 和 D 可以在命令中设置。至于为什么后端需要运行在 9034 端口,是因为前端和后端通过这个端口通讯(应该是写死在代码里的)
挂载主机数据卷到容器内,可以通过如下命令进行文件夹映射
?从容器内拷贝文件到主机上
?总结
以上就是这篇文章的全部内容了,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流。