如何使用docker配置分布式环境快速配置数据科学开发环境

如何使用Docker快速配置数据科学开发环境_百度知道
如何使用Docker快速配置数据科学开发环境
映射容器SSH端口Docker容器运行后,如何进入容器进行操作呢。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可,安装配置SSHD。当我启动了五个容器后,每个容器默认是没有配置SSH Server的?起初我是用SSH
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
您可能关注的推广
开发环境的相关知识
下载知道APP
随时随地咨询
出门在外也不愁轻松搞定数据处理的五款Eclipse开源工具-其它-@大数据资讯
你好,游客
轻松搞定数据处理的五款Eclipse开源工具
来源:51CTO操作系统频道&
作者:核子可乐译
  轻松搞定数据处理的五款Eclipse开源工具
  立足于Eclipse富客户端平台(简称RCP)框架,多种科学工具不断涌现,旨在帮助我们在开源环境下实现数据处理与可视化。相关各企业与机构围绕此类工具开展协作,而Eclipse科学工作组也由此诞生。下面我们就一同了解来自Eclipse科学工作组的五款出色科学工具,其全部属于开源项目且以Java及Eclipse RCP为基础。
  手动处理数据的时代已经成为历史。如今科学工具正快速普及,且足以在复杂且庞大的数据处理领域帮助用户满足日益增长的需求。
  立足于Eclipse富客户端平台(简称RCP)框架,多种科学工具不断涌现,旨在帮助我们在开源环境下实现数据处理与可视化。相关各企业与机构围绕此类工具开展协作,而Eclipse科学工作组也由此诞生。
  下面我们就一同了解来自Eclipse科学工作组的五款出色科学工具,其全部属于开源项目且以Java及Eclipse RCP为基础。
  DAWNSci (来自英国Diamond Light Source)
  DAWNSci的处理视图中显示的3D体积与蜥蜴等值面图形
  DAWNSci是一套数据分析工作台,由多个网站协作开发。其主要用于一系列先进科学与研究领域,包括病毒、视网膜、恐龙骨骼等方向。其功能囊括了1D、2D与3D绘图,图像分析处理与工作流算法,同时能够全面支持Python。DAWNSci的底层数据结构亦被拆解作为Eclipse January项目中的可复用组成部分。
  DAWNSci相关信息
  DAWN视频说明
  DawnSci的GitHub项目
  ChemClipse (来自德国Lablicate UG)
  ChemClipse能够分析不同木材样本以确认其来源
  ChemClipse是一套开源化学分析工作台,其可用于分析色谱与质谱实验数据。该技术方案能够识别底层组件的构成材料,从而实现取证、质量控制与食品分析等目标。ChemClipse允许化学家们评估数据集并实现峰值检测与峰值合并等功能,从而确定物质类型并将结论合并为报告。
  ChemClipse相关信息
  ChemClipse的Eclipse Git项目
  ICE (来自美国橡树岭国家实验室)
  ICE插件,负责实现3D模型的实时对流模拟与后期处理
  集成化计算环境(简称ICE)是一套富建模与模拟工作台。其能够帮助计算科学家轻松创建输入文件、在本地或远程设备上启动任务并处理输出结果,从而显著提升生产效率并简化工作流程。ICE目前被广泛应用于核反应堆内中子反射率模拟等领域,其丰富的功能集包括3D可视化处理与其它独立框架。ICE项目的基础可视化与数据结构组件已经分别以复用方式作为Eclipse高级可视化项目(简称EAVP)以及Eclipse January项目的组成部分。
  Eclipse ICE相关信息
  ICE视频说明
  ICE的GitHub项目
  Architect (来自比利时OpenAnalytics)
  Architect与R语言协作实现科学数据处理
  Architect是一套数据科学开发环境。Architect能够建立统计模型并拥有丰富的R语言支持能力,包括相关编辑器及控制台合并等。另外,其还提供出色的Docker文件编辑能力。Architect团队还在其中建立了一款Jupyter控制台插件,允许我们在Eclipse内将控制台与任意Jupyter内核进行整合,从而轻松将Julia、R或者Python代码嵌入至工作台当中。
  Architect相关信息
  Architect 的GitHub项目
  Apogy (加拿大航天局)
  Apogy是一套由加拿大航天局开发并使用的工作台,旨在实现多任务运营与规划。Apogy整合了多项技术成果,能够完成包括机械臂操作、漫游车控制以及传感器控制在内的多种系统运作任务。Apogy采用独特的建模机制生成可视化3D拓扑结构,并能够以3D形式显示科学仪器与航天装置。
  Apogy项目相关信息
  Apogy视频说明
  Apology的BitBucket项目
  原文标题: 5 Eclipse tools for processing and visualizing data
  【51CTO独家译文,合作站点转载请标明来源为】
相关新闻 & & &
& (05月18日)
& (04月19日)
& (06月07日)
& (05月11日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款如何使用 Docker 快速配置数据科学开发环境?_Linux中国-爱微帮
&& &&& 如何使用 Docker 快速配置数据科学…
数据科学开发环境配置起来让人头疼,会碰到包版本不一致、错误信息不熟悉和编译时间漫长等问题。这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难。而且这也是一个完全不常见的准入门槛。还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术。本文中我们就要介绍的这种技术名叫。Docker能让开发者简单、快速地搭建数据科学开发环境,并支持使用例如 notebooks等工具进行数据探索。要使用Docker,我们要先下载含有相关包package和数据科学工具的镜像文件。之后,我们可以通过该镜像,在数秒之内就启动一个数据科学开发环境,免去了手动安装包的麻烦。这个环境,也被成为Docker容器container。容器解除了配置的问题——当你启动一个Docker容器后,它就已经处于了良好的状态,所有的包都是可以正常运转的。Docker的出现是为了帮助你除了降低进入数据科学的门槛之外,Docker还可以让我们快速搭建拥有不同Python版本和安装了不同包的孤立环境,不像virtualenv那样还要重新安装包。在本文中,我们将介绍Docker的基础知识,如何安装Docker以及如何利用Docker容器快速地在本地机器上搭建数据科学环境。虚拟机能够创建虚拟机的软件已经问世数十年,可以让你在本地电脑上模拟其他的系统环境。举个例子,即使你的电脑运行的是Windows操作系统,你仍可以通过虚拟机运行Linux系统。这可以让你在不重装系统的前提下,使用Linux——也就是说,Linux系统是虚拟化运行的,所以你可以从Windows系统访问虚拟机。基本上,你可以在点击该软件的程序图标之后,看到弹出的窗口中乃是一个Linux系统桌面。而虚拟机需要镜像来启动,也就是你必须先拥有一个目标系统的镜像,才能启动相应的虚拟机。如果你想使用Linux,你使用的镜像就得包含创建Linux环境所必须的全部文件。示例:在Mac上通过虚拟机使用Windows容器尽管虚拟机有诸多好处,例如能够使在Windows平台进行Linux开发成为现实,但是也有着自身的缺陷。首先,虚拟机的启动时间很长,要消耗大量的系统资源。另外,在利用镜像创建完虚拟机中,很难在安装完所需要的包后,再将这个镜像保存,创建为新的镜像。而Docker提供的Linux容器,则通过让多个孤立环境在同一台机器上运行,解决了这个问题。你可以把容器看作是一种更快、更简单地使用虚拟机的方法。但是,容器的使用却有一点麻烦,而且管理和发布容器镜像也不容易。作为开发人员,我们希望能够快速下载并启动一个拥有指定包和工具配置的数据科学环境。例如,你肯定会希望能快速启动一个安装了Jupyter notebook、spark和pandas的容器。DockerDocker容器的里层包裹的是Linux容器(a layer over Linux containers),可以支持更简单地对容器进行管理和发布。使用Docker,可以很容易地下载具备相应包的镜像,并且快速启动。另外,Docker是跨平台的,支持包括Mac、Windows和Linux等系统。作为创建孤立Python环境的另一种方式,虚拟环境virtual environment也有这些优势。但是Docker相较于虚拟环境的主要优势有:能够快速启动。如果你想马上就开始进行数据分析,使用Docker就免去了你等待各种包进行安装的时间。配置测试无误。很多时候,要正常安装Python包会,需要以安装某些系统包为前提,并只有在进行相应设置后才能正常使用。如果设置不当,会引起一些很奇怪的错误。但是使用Docker后,这些包就已经配置好了,可以立即使用。跨平台一致性。Python中的包是可以跨平台使用的,但是在Windows和Linux平台下有些不同,而且还有部分依赖包无法在Windows中安装。但是由于Docker容器运行的都是Linux环境,所以它们是高度一致的。能够设置checkpoint并且进行恢复。你可以往Docker镜像中安装包,然后将那个checkpoint下的环境创建成一个新的镜像。这让你能够快速撤销或者回滚配置。运行一个Docker镜像,就相当于创建了一个Docker容器。在本文中,我们在容器中运行一个Jupyter notebook,然后通过浏览器界面来处理数据。安装Docker第一步就是安装Docker。Docker官方为Windows和Mac用户提供了一个简便安装过程的图形界面安装器。下面是每个操作系统的安装指南。在安装时,你需要使用shell命令提示符shell prompt。shell命令提示符也被称为终端或命令行,是在你的机器上通过文本界面而非图形界面运行命令的一种方式。例如,你可以在Windows系统中双击记事本就可以打开一个文本编辑器,也可以在Linux终端中输入nano达到这个目的。Docker提供了一个预先配置好的shell,可以用来运行Docker命令。请按照下面的方法操作:Mac OS —— 从Launchpad中打开Docker Quickstart Terminal程序。。Linux —— 打开任意bash终端,就可以使用docker命令。Windows —— 双击桌面上的Docker QuickstartTerminal程序的图标。。下文在提到需要运行Docker命令或输入某个命令时,你都需要使用这个shell命令提示符。下载镜像下一步是下载你需要的镜像。下面是我们网站(dataquestio)目前提供的数据科学开发专用镜像:dataquestio/python3-starter —— 这个镜像已经安装好了Python 3, Jupyter notebook和许多其他流行的数据科学库,包括numpy,pandas,scipy,scikit-learn和nltk。dataquestio/python2-starter —— 这个镜像已经安装好了Python 2, Jupyter notebook和许多其他流行的数据科学库,包括numpy,pandas,scipy,scikit-learn和nltk。你可以通过输入docker pull IMAGE_NAME命令,下载相应的镜像。如果你想下载dataquestio/python3-starter这个镜像,那么你需要在终端输入docker pull dataquestio/python3-starter命令。输入这段命令后,程序会自动从Docker Hub下载镜像。Docker Hub与Github类似,不过却是Docker镜像的一个中枢。它会将相应的镜像文件下载至你的本地机器,这样你才能利用该镜像创建容器。新建一个文件夹在本地创建一个文件夹,用于存放notebooks。这个文件夹中将储存你所有的工作文件,并会持续存在于你的机器中,即使是你销毁了docker容器。在这里,我们将创建下面这个文件夹,/home/vik/notebooks。运行镜像镜像下载完成后,你可以通过docker run运行该镜像。我们还需要传入一些选项,确保镜像配置正确。-p 选项用于设置虚拟机的端口,让我们可以在本地访问Jupyter notebook服务器。-d 选项用于以detached模式运行容器,也就是作为背景进程运行。-v 选项让我们指定在本地机器中使用哪个文件夹存储notebook。完整的运行命令是类似这样的:docker run -d -p 8888:8888 -v /home/vik/notebooks:/home/ds/notebooks dataquestio/python3-starter你应该将/home/vik/notebooks更改为你用于存储文件的地址。另外,应该把dataquestio/python3-starter更改为自己喜欢的docker镜像。执行docker run命令将会创建一个Docker容器。这是与你的本地机器相隔绝的,也可以把它看作是一台单独的电脑。在容器内部,会运行一个Jupyter notebook服务器,并可以让我们使用许多数据科学工具包。另外,docker run命令也会在终端打印出容器的编码container id,在通过其他docker容器对该容器进行修改时,就必须要使用这个编码。在下文中我们称该编码为容器编码。查看notebook服务器如果你的系统是Linux,那么下一步非常简单——只需要在浏览器中打开localhost:8888,之后应该就能看到运行中的notebook。如果你使用的是Windows或OSX,之前也按照Docker官方安装指南进行了操作,并且安装过程中使用了docker-machine,那么本地机器的名称是default,运行docker-machine ip default命令就可以得知docker容器的ip。如果使用了其他的名字,例如dev,那在命令中将default替换为dev即可。接下来,在浏览器中访问CONTAINER_IP:8888就可以看到notebook(将CONTAINER_IP替换为你的容器编码)。下面就是你应该看到的样子创建一个notebook到了这一步,你可以创建一个新的Jupyter notebook测试下这个孤立的开发环境。试试输入下面这个scikit-learn的:from sklearn import datasetsfrom sklearn.cross_validation import cross_val_predictfrom sklearn import linear_modelimport matplotlib.pyplot as plt%matplotlib inlinelr = linear_model.LinearRegression()boston = datasets.load_boston()y = boston.targetpredicted = cross_val_predict(lr, boston.data, y, cv=10)fig, ax = plt.subplots()ax.scatter(y, predicted)ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)ax.set_xlabel('Measured')ax.set_ylabel('Predicted')plt.show()添加数据文件如果你想往开发环境中添加数据文件,你有三个选择。第一个选择,就是将文件放在你之前创建用来存放notebook的文件夹中。你放那里的任何文件将可以自动通过Jupyter notebook中访问。第二种选择就是使用docker cp命令。docker cp可以从本地机器复制文件至容器中,反之亦然。假设你想拷贝/hom/vik/data.csv文件至一个id为4greg24134的容器中,你可以输入下面的命令:docker cp /home/vik/data.csv 4greg24134:/home/ds/notebooks这会将data.csv文件拷贝到容器中用于存放notebook的文件夹中。当然,你可以选择将文件放到容器中的任何地方,但是把它们放在存放notebook的文件夹忠厚,你就可以轻松地通过Jupyter notebook访问这些文件了。第三个选择就是使用Jupyter notebook首页右上方的upload按钮。这可以让你选择一个文件,并上传到容器中用于存放notebook的文件夹中。不管你使用哪种方法,要想在Jupyter notebook中加载文件,需要按照类似下面的方式进行:import pandasdata = pandas.read_csv(&data.csv&)复制容器中的数据文件你可能会需要从容器中拷贝文件至本地机器。最容易的办法就是把文件放置在/home/ds/notebooks文件夹中,这样的话这些文件就会自动映像到本地机器。另一种方法也就是利用docker cp命令。假设你想从id为4greg24314的容器中,把/home/ds/notebooks/data.csv文件拷贝至本地机器的/home/vik/文件夹中,你可以输入下面的命令:cp 4greg24134:/home/ds/notebooks/data.csv /home/vik/data.csv最后一种方法就是使用Jupyter界面中的download选项。在网页模式下点击一个不是notebook的文件,将会将其下载至本地。如果你已经打开了一个notebook,那么可以先点击File,然后选中download as就可以下载至本地。安装更多的工具包如果你想在容器中安装更多的工具包,你可以通过正常的bash命令行命令就可以实现。要想在容器中执行这些命令,你需要运行docker exec命令。这个命令接受容器的id作为参数,以及一个期望运行的命令。例如输入docker exec -it 4greg24134 /bin/bash将会在编码为4greg24134的容器中开启一个shell命令提示符。-it选项确保我们在容器中打开了一个输入会话,并且可以输入命令。在运行docker exec命令之后,你就会看到容器中的shell命令提示符出现。容器此时正通过一个名为ds的虚拟环境运行Python程序,这个虚拟环境已经是处于激活状态的。接下来,只需要输入pip install PACKAGE_NAME就可以安装其他的工具包。例如,你可以使用pip install requests来安装requests。当你希望退出容器的shell终端时,只需要输入exit即可。关闭docker容器在完成数据处理工作之后,你就可以通过docker rm -f CONTAINER_ID来停止docker容器。你应该输入之前获得的容器编码。如果你忘了,你可以运行docker ps查看。容器停止运行之后,notebooks会继续存放在你本地用于存放的文件夹中。更进一步Docker镜像是通过创建的。Dockerfile指定了镜像中应该安装的包和工具。通过修改Dockerfile,你就可以改变镜像默认按照的包和工具。如果你想在本文中所使用的镜像基础上做一定修改,可以向我们的提交PR,这个仓库中包含了镜像的Dockerfile。我们欢迎大家参与改善当前的镜像,或是添加其他安装了非Python包和工具的镜像。
点击展开全文
『Linux 中国』信息矩阵旗舰号:每日为 Linux 及开源爱好者推送 Linux 相关技术、运维与研发、开源资讯等方面的精选内容;提供 Linux 命令帮助、技术文章检索等功能。
您的【关注和订阅】是作者不断前行的动力
本站文章来自网友的提交收录,如需删除可发送邮件到 bang@ 或联系QQ ,
(C)2014&&版权所有&&&|&&&
京ICP备号-2&&&&京公网安备34Docker实战:更轻松、更愉快、更高效
发表于 13:45|
来源个人博客|
作者Michael Herman
摘要:借助Docker,我们可以更容易地进行web应用部署,而同时不必头疼于项目依赖、环境变量以及各种配置问题,Docker可以快捷、高效地处理好这一切。
编者按:借助Docker,我们可以更容易地进行web应用部署,而同时不必头疼于项目依赖、环境变量以及各种配置问题,Docker可以快捷、高效地处理好这一切。而这也是本教程所要实现的主要目的。以下是作者原文:
首先我们来学习使用Docker容器运行一个Python Flask应用,然后逐步介绍一套更酷的开发流程,其中涵盖了应用的持续集成与发布。
流程在本地功能分支上完成应用代码。
在Github上发起一个到master分支的Pull Request。
在Docker容器上运行自动测试。
如果测试通过,手动将这个PR merge进master分支。
一旦merge成功,再次运行自动测试。
如果第二次测试也通过,就在Docker Hub上对应用进行构建。
一旦构建完成,自动化地部署到生产环境。
& & & & & & &
本教程基于Mac OS X,在开始前需要保证以下工具已正确安装配置:Python v2.7.9, Flask v0.10.1, Docker v1.4.1, Docker Compose, v1.0.0, boot2docker 1.4.1, Redis v2.8.19好了,让我们开始吧。首先来介绍一些Docker中的基本概念:
Dockerfile中包括了一系列语句,用于对镜像的行为进行描述。
镜像是一个模板,用来保存环境状态并创建容器。
容器可以理解为实例化的镜像,并会在其中运行一系列进程。
如果对Dockerfile、镜像和容器的具体细节感兴趣,那么可以从Docker的官方文档获取更多详细信息。
为什么是Docker?
使用Docker意味着你能在开发机上完美地模拟生产环境,而不用再为任何由两者环境、配置差异所造成的问题而担心,除此之外Docker带给我们的还有:
良好的版本控制。
随时便捷地发布/重建整个开发环境。
一次构建,随处运行,就是这么神奇!
配置Docker
由于Darwin(OS X内核)缺少运行Docker容器的一些Linux内核功能,所以我们需要借助boot2docker,一个用于运行Docker的轻量级Linux发行版(启动一个专门为运行Docker定制过的小型虚拟机)。
首先为我们的Flask项目创建一个名为“fitter-happier-docker”的目录。
接下来遵照官方文档的步骤来完成Docker和boot2docker的安装。
我们可以通过以下命令来验证安装是否正确:$ boot2docker version
Boot2Docker-cli version: v1.4.1
Git commit: 43241cb
Compose Up!
Docker Compose是官方提供的容器业务流程框架(译注:曾经的项目名称是Fig,甚至在本译文的初稿时依然是,进化速度之快可见一斑),只需通过简单的.yml配置文件,就能完成多个容器服务的构建和运行。
使用pip来安装Docker Compose,并通过如下命令来确认安装正确:$ pip install docker-compose
$ docker-compose --version
docker-compose 1.1.0现在来启动我们的Flask+Redis应用(你可以从这个repo来获取项目的全部源代码),首先在项目根目录下新建docker-compose.yml文件:
build: web
- web:/code
- "80:5000"
command: python app.py
image: redis:2.8.19
- ""可以看到我们对项目所含两个服务进行的操作:web:我们将在web目录下进行容器的构建,并且将其作为Volume挂载到容器的/code目录中,然后通过python app.py来启动Flask应用。最后将容器的5000端口暴露出来,并将其映射到主机的80端口上。
redis:我们直接使用Docker Hub上的官方镜像来提供所需的Redis服务支持,将6379端口暴露并映射到主机上。
你一定注意到了位于web目录下的Dockerfile文件,它用于指导Docker如何构建我们的应用镜像(基于Ubuntu),并且保证了完备的依赖支持。
构建并运行
接下来只需要一行简单命令,就能轻松搞定一切(镜像的构建及容器的启动运行):Ubuntu
$ docker-compose up& & & & & & &
& & & & & & & & & & &
这会根据Dockerfile来构建Flask应用的镜像,从官方仓库拉取Redis镜像,然后将一切运行起来。现在你可以去喝一杯咖啡,呃,也许是两杯:首次运行会花费相对较长的时间,事实上Docker会在构建过程中,将Dockerfile中的每一步操作(更正式的说法应该是layer)缓存下来,以后的构建过程会因此提速很多,因为只有发生改变的步骤才会被重新执行。Docker Compose会并行地启动全部容器,每个容器都会被分配各自的名字,并且会为日志设置可读性更高的配色方案。好了,那么准备好来测试了吗?打开你的浏览器,输入主机DOCKER_HOST环境变量所对应的IP地址,例如在我这里是
(运行boot2docker ip命令可以查询到IP地址)。接下来你应该会在浏览器中看到以下文本“Hello! This page has been seen 1 times.”:& & & & & & & & & & &&
刷新页面,如果一切正常的话,计数器变量应该会进行累加。通过Ctrl-C来终止我们的应用进程,然后通过以下命令让其改为在后台运行:$ docker-compose up -d想查看应用进程的运行状态?只需要输入以下命令就可以了:
$ docker-compose ps
--------------------------------------------------------------------------------------------------
fitterhappierdocker_redis_1
/entrypoint.sh redis-server
0.0.0.0:/tcp
fitterhappierdocker_web_1
python app.py
0.0.0.0:80-&5000/tcp, 80/tcp可以看到我们的两个进程运行在不同的容器中,而Docker Compose将它们组织在一起!更进一步在确定一切正常无误后,使用docker-compose stop命令来终止我们的应用,然后通过boot2docker down来安全地关闭虚拟机。接下来就可以向Git提交本地修改,并推送到Github了。那么,我们刚才都完成了什么呢?我们建立了本地环境,通过Dockerfile详尽描述了如何构建镜像,并基于该镜像启动了相应容器。我们使用Docker Compose来将这一切整合起来,包括构建和容器之间的关联、通信(在Flask和Redis进程之间)。接下来,我们来看一个更酷的工作流程,即通过引入CircleCI来实现项目的持续集成。同样的,你可以从获取源代码。Docker Hub到目前为止我们已经接触过Dockerfile、镜像以及容器(当然,借助了Docker Compose的帮助)。如果你很熟悉Git的工作流程,那么可以把Docker镜像理解为Git的repo,而容器类似于该repo的clone,如果将这个比喻继续类推下去,那么Docker Hub也就相当于Github的地位了。为了使用Docker Hub,你可以用Github账号来完成注册。
添加一个新的自动构建,将刚才完成的项目repo加入进来,一切按照默认选项即可,除了将“Dockerfile Location”改为“/web”。
一旦添加完毕,Docker Hub会进行一次初始化构建,请确保一切正常。
Docker Hub和CI
Docker Hub自身通过
就可以充当持续集成服务,从而在每次推送Git提交后自动进行构建。
这意味着你不能直接将镜像推送到(通过docker push)Docker Hub上。Docker Hub会自己从repo进行拉取并构建镜像,从而保证整个过程中没有错误。在你的工作流程中请铭记这一点,因为在Docker文档中目前并没有对此进行详细说明。
让我们来试一下,加入以下测试用例:self.assertNotEqual(four, 5)
提交并推送到Github,然后就可以看到Docker Hub如何开始一次新构建了。
由于这是项目部署上线前的最后一道防线,我们当然希望Docker Hub在构建完成之前,能够捕获所有的错误和异常。另外,你肯定也希望能将自己的单元测试和集成测试加入到持续集成流程中,
而这正是CircleCI的用武之地。
CircleCI是一个持续集成/发布平台,支持对Docker容器进行测试。你只需提供一个Dockerfile,CircleCI会据此构建镜像,并启动一个新容器,然后在其中运行你的测试。
还记得我们期望的工作流程吗?链接
现在来看看如何完成它。安装CIrcleCI官方提供了很好的入门指导。使用Github账号完成注册,然后将你的Github repo添加为一个新项目(成功后会收到邮件通知)。这会为该repo增加一个hook,每当你向其推送新的提交时,都会触发一次新的构建。接下来需要向我们的repo添加一个配置文件,用以指导CircleCI完成构建。circle.yml的文件内容如下:machine:
dependencies:
- pip install -r requirements.txt
- docker-compose run -d --no-deps web
- python web/tests.py实际上,我们构建了一个新的镜像,并启动了一个新容器,然后进行测试:首先检查web应用是否正常启动运行,然后逐一进行单元测试。你应该已经注意到我们在这里使用了命令docker-compose run -d --no-deps web而不是docker-compose up来启动应用,这是因为CircleCI已经集成了可用的Redis运行时环境,所以我们只需启动web应用进程就可以了。当circle.yml文件修改完成,就可以推送到Github来启动一次新构建了。记住,这将同时在Docker Hub上启动一次构建。一切正常?在继续下去之前,需要对工作流程进行一些调整,因为我们通常不希望将提交直接推送到master分支上。功能分支工作流程如果不太熟悉这一工作流程,那么可以从此处获得准确生动的解释。让我们来快速浏览一个示例:创建功能分支$ git checkout -b circle-test master
Switched to a new branch 'circle-test'更新应用 并在texts.py里增加一个新的断言:self.assertNotEqual(four, 6)发起一个Pull Request$ git add web/tests.py
$ git commit -m "circle-test"
$ git push origin circle-test甚至在你真正发起PR之前,CircleCI就已经启动了构建。在PR创建完毕后,只需等待CircleCI通过所有测试,我们就可以点击Merge按钮来合并入master分支了。一旦merge成功,Docker Hub就会触发相应的构建过程。重构工作流程如果回到本文开头的工作流程处,你会发现我们实际上希望Docker Hub在master分支上再次进行测试后才启动构建,所以让我们来对现有流程进行以一些快速的调整:打开你的Docker Hub仓库,在Settings下选择Automated Build。取消对“When active we will build when new pushes occur”的选中状态。保存。选择位于Settings下的Build Triggers。将status改为on。复制以下curl命令:$ curl --data "build=true" -X POST将以下代码加入到circle.yml文件末尾:deployment:
branch: master
- $DEPLOY现在我们会在merge到master分支并通过测试之后,执行$DEPLOY环境变量所代表的命令,我们需要将这个变量的值加入到CircleCi的环境变量中:打开 Project Settings,选择 Environment variables。添加一个名为“Deploy”的新变量,并且将刚才复制的curl命令粘贴进去作为该变量的值。现在来检验一下成果:$ git add circle.yml
$ git commit -m "circle-test"
$ git push origin circle-test发起一个新的PR,一旦其通过CirecleCI测试,将其merge到master分支,这会触发另一次构建。一旦再次通过测试,之前设置的curl命令就会触发Docker Hub去启动一次新构建,一切都很完美。结论我们已经跑通了这个基于CircleCI的持续集成工作流程(步骤1-6):在本地功能分支上完成应用代码。在Github上发起一个到master分支的Pull Request。在Docker容器上运行自动测试。如果测试通过,手动将这个PR merge进master分支。一旦merge成功,再次运行自动测试。如果第二次测试也通过,就在Docker Hub上对应用进行构建。一旦构建完成,自动化地部署到生产环境。关于整个流程的最后一块拼图呢:及自动化地将应用发布到盛传环境(第7步),你可以在我的另一篇博客中得到答案。(翻译:李明/审校:刘亚琼)原文链接:【译者】:李明(,/hydRAnger ),Nicescale前端程序猿,本科、硕士皆为生物科学方向,出于热情转投IT领域,做过游戏开发,兴趣比较广泛以致有杂而不精之嫌,还需精进,欢迎交流、指导。目前关注于web相关技术、开源软硬件等领域。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 docker配置分布式环境 的文章

 

随机推荐