当前位置:首页 > 软件开发 > 正文

layer怎么读 layering是什么意思

layer怎么读 layering是什么意思

大家好,今天来为大家解答layer怎么读这个问题的一些问题点,包括layering是什么意思也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧...

大家好,今天来为大家解答layer怎么读这个问题的一些问题点,包括layering是什么意思也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

登陆126邮箱出现登陆登陆失效,怎么办

清除COOK文件,选择里面的密码文件,如若不行换种浏览器,例如360浏览器,右上角有个邮件选项,设置一键进入邮箱。

126邮箱简介:

126邮箱是网易公司于2001年11月推出的免费的电子邮箱,是网易公司倾力打造的专业电子邮局,邮箱容量无限,支持普通附件/云附件50M/15G,邮件处理速度高达每秒10000封,Pop3/IMAP/SMTP,支持等。

邮箱特点:

多样功能

超大容量、超大附件

126邮箱拥有3G超大存储空间(可获512M免费网盘),让你再也不用担心邮箱空间爆满。还支持超大附件,一次可发送或接收多个附件,文档、图片、MP3任你尽情收发。

超快速度

126免费邮采用国家骨干网,内核配备DIV+JS引擎,极大提高邮箱页面访问速度,有效缩短等待时间,使得收发邮件更为快捷,让你体验飞一般的感觉。

超级稳定

126免费邮专享大型矩阵式服务器架构,一流的电子邮件系统。你可以随时稳定登录邮箱,收发邮件通畅无阻,重要邮件存放最安心!

超高安全

国际顶级卡巴斯基杀毒引擎,每小时自动更新一次全球病毒库,有效阻挡病毒入侵,忠实捍卫你的电脑数据安全;智能识别垃圾邮件,多重垃圾过滤,使你再也不用忍受垃圾邮件骚扰,有效提高工作效率。

极速风格

采用国际领先的分布式系统引擎,确保用户读信、写信、收信等操作过程的响应时间减少一半以上,同时修改和重构了邮件系统的框架和流程,大大提高了界面的友好度和系统的易用性,给你更酷、更爽的极速体验!

512兆超大网盘

126邮箱独家配备了市面上最大的512兆免费网盘,先进的海量存储技术,打造更安全更便捷的在线存储服务,让你的资料存取不受时间和地点的限制。

超大相册

126邮联动无限空间网络相册,在邮箱内专门为用户提供数码照片储存空间。上传照片后,你可以使用独立域名把照片公开给朋友观看,或者设置浏览权限供部分人浏览;还可使用专用上传工具批量上传照片;更方便的是可以将电邮图片附件可直接转存到我的相册,给你的数码照片在网络上安个家。

智能通讯录

独家配置强大的智能通讯录,可进行好友分组、列出来信、搜索邮件、按字母拼音排序等操作,支持通讯录导出。还有更多贴心小技巧,可以帮助你方便快捷地使用噢!

自动回复功能

126邮拥有强大的自动回复功能,只要设置了该功能,一旦你收到朋友来信,系统将自动帮你回复邮件。即使去度假了,只要设定了自动回复,就可高枕无忧。

邮箱双克隆

126邮箱双克隆功能包括:邮件克隆和通讯录克隆。通过邮件克隆功能,你可以在163免费邮里收到其它八个邮箱的邮件;通过通讯录克隆功能,你可以将其它邮箱中的通讯录复制到163免费邮。通过双克隆,无须一个个输入Email地址,也无须逐个登录邮箱,一键操作就可把你使用的其他邮箱中的通讯录、邮件通通克隆过来。提升邮件沟通效率,就是这么简单!

客户端收发邮件

你只需进行简单的客户端设置,就可以使用Outlook,Foxmail等客户端软件收发邮件,让你无须登录邮箱页面就可以尽情收发邮件。

精美信纸

126邮箱推出圣诞节、新年、情人节、学生、生日、四季、女生、卡通等多款个性信纸,你可以选择不同的精美信纸来表达你的心情,让你的邮件图文并茂、个性十足!

多彩界面

多款风格宜人、色彩清新的界面任你选择,还有三种不同的写信字体,再加上独特的图释、签名、背景和版式等,这一切都能让你的邮件与众不同,尽情展现自己的个性!

进行过滤

你可按发件人、收件人、邮件主题、邮件大小等对邮件进行过滤,将符合条件的邮件拒收或转移到指定文件夹,方便对邮件进行分类管理。

运营经验

作为全国首家提供中文电子邮件服务的运营商,网易熟练驾驭海量用户级别的邮件系统,第一时间响应并解决系统故障,保证你使用电子邮箱通畅无阻。

登录安全

为了更安全地保证你的个人隐私,网易126免费邮提供全面的SSL功能。SSL是SecuritySocketLayer的缩写,技术上称为安全套接字层,使用SSL可以对通讯(包括电子邮件)内容进行高强度的加密,以防止黑客监听你的通讯内容甚至是用户密码。

黑白名单

你可自行设置黑名单,拒收来自黑名单中的邮件,有效防止垃圾邮件骚扰;设定白名单,100%接收来自白名单中的邮件,重要邮件绝不丢失。

快速收发

超大容量系统配合高效的邮件处理技术,缩短邮件在发送列表中的等待时间,快速抵达目标邮箱,收发邮件更加快捷

邮件撤回

网易免费邮箱的实验室中新增“邮件撤回”功能。开通后,对于已发送的邮件,如果符合条件,可以尝试进行撤回,帮助您避免一些不必要的尴尬。

邮件需要同时满足以下条件,才能撤回:

1.邮件发往网易163、126、vip163、vip126、188或139邮箱。

2.邮件未被读过。

3.邮件未被客户端软件(如OutLook,Foxmail等)收取过,也未被其他邮箱通过pop3方式收取过。

4.邮件发送未超过15天。

计算机科学与技术专业怎么选考研学校

如果本科比较就参加工作的话,可以在课余时间加强下软件工程。如果要读研究生,就多学些数学。上天都是公平的,大家的时间都一样,付出时间越多就越好,很难可以做到数学很好工程又很好的。

计算机分很多种,但可以简单划分为:软件工程,计算机科学。

如果是本科毕业就工作的话,做软件工程比较好,上学时多做些项目,找工作还是很容易的(PS:我帮很多公司面试过程序员)。

计算机科学方面就另说了,有人工智能呀,分布式计算呀等等,这方面要读到研究生以上,才能到公司。当然现在很多软件工具可以让你很快掌握人工智能应用开发,比如:WelcometoTensorLayer

但总体来说,本科毕业想找科学方面的工作还是比较难的,还是学软件工程好。

据我所知,到研究生以后国内更多的是计算机应用,图像处理,模式识别,人工智能等等吧。可以笼统划归为技术,国外像CMU水平的学校有些教授做的是计算理论和算法的研究,这可以算是计算机科学。就目前CS的发展来看科学是基础,技术是发展大方向,国内对技术的重视程度比科学高很多。国内也没有几个教授敢去单纯搞科学研究的,毕竟这东西很可能研究很久又出不来什么实质性进展在国内的科研大环境下,技术还是很受推崇的,不过如果励志成为计算机领域的大神的话,对于计算理论,算法这些必须狠下功夫。

发布于2015-02-18?著作权归作者所有

cad2016怎么安装灰色

磁盘的写入权限被禁用,则安装路径就会灰色,无法选择。用户需要在管理员权限下,修改文件夹的读写权限。解决方法要解决cad安装路径灰色的问题,用户需要有管理员权限,并且保证有磁盘的写入权限。用户可以尝试以下方法解决:

确保当前用户有管理员权限

确保安装时磁盘有读、写权限

尝试以管理员身份运行安装程序

重启电脑后再次尝试安装

tekla里,怎么添加花纹板跟格栅板

可以通过以下步骤添加花纹板和格栅板:1.在tekla中选择相应的图层或视图2.点击插入选项卡中的“对象”3.在“对象”中选择“网格和花纹板”4.在“网格和花纹板”中选择所需的花纹板或格栅板5.在“属性”选项卡中,可以进行调整和自定义,如尺寸、颜色、对齐等Tekla结构软件为用户提供了丰富的建模工具和功能,使用户能够轻松地使用花纹板和格栅板进行建模。使用花纹板和格栅板可以使模型更加准确和具有美观性,也更便于进行分析和计算。

如何用Docker成为更高效的数据科学家

使用Docker容器来开发机器学习模型的好处有很多。近日,GitHub的资深机器学习科学家HamelHusain在TowardsDataScience上发表了一篇入门级的Docker容器教程,文章从基本的概念谈起,清楚明白地介绍了Docker容器的一些基本的操作方式和注意事项。机器之心对本文进行了编译介绍。本文所涉及的所有相关代码请访问:https://github.com/hamelsmu/Docker_Tutorial

过去五年来,Docker容器已然成了一个热门词汇,似乎我的所有软件工程师朋友都在使用它们来开发应用。我想搞清楚这种技术可以如何让我更有效率,但我发现我在网上找到的教程要么过于注重细节(解释了一些我作为数据科学家绝不会使用的功能),要么就过于浅显(没有足够的信息帮助我理解如何快速有效地使用Docker)。

所以我写了这篇快速入门,这样你不必自己去网上筛选信息就能学习到快速上手Docker所需要的一切。

Docker是什么?

你可以把Docker看作是轻量级的虚拟机——包含你运行应用所需要的一切。Docker容器可以获取你的系统的状态的快照,这样其他人就可以使用这个快照快速重建你的计算环境。对于本教程而言,这就是你需要了解的一切。更多详细介绍可参阅:https://goo.gl/YzUwbc

为什么要使用Docker?

1.重现性:作为专业的数据科学家,让你的结果能够重现是非常重要的。重现性不仅有助于同行评议,而且可以确保你创建的模型、应用或分析可以无障碍地运行,这能让你交付的成果更稳健,更能经受时间的考验。举个例子,假如你用Python创建了一个模型,只是运行pipfreeze并将结果得到的requirements.txt文件发送给你的同事是不够的,因为其中只包含特定于Python的依赖条件——而实际上的依赖条件不只有Python,还有操作系统、编译器、驱动程序、配置文件以及你的代码成功运行所需的其它数据。就算你只分享Python依赖条件也能成功,将所有东西都封装到一个Docker容器中还是能减轻其他人重建你的环境的负担,并让他们能更轻松地访问你的成果。

2.计算环境的可移植性:作为一位数据科学家,尤其是机器学习领域内的数据科学家,快速改变你的计算环境的能力能够极大地影响你的生产力。数据科学的开始工作常常是原型设计、探索和研究——这些工作并不一定立即就需要特定的计算资源。这个工作往往是在笔记本电脑或个人计算机上完成的。但是在后面某个时候,你往往会需要不同的计算资源来显著加速你的工作流程——比如使用更多CPU或强大的GPU来执行深度学习等任务。我看到很多数据科学家由于感受到了在远程机器上重建他们的本地环境的困难,就将自己局限在了本地计算环境内。而Docker能让你的环境(你的所有库和文件等等)的移植非常简单。在Kaggle竞赛中,快速移植计算环境也是一个巨大的竞争优势,因为你可以成本高效地利用AWS的宝贵计算资源。最后,创建Docker文件让你能移植很多你喜欢的本地环境配置——比如bash别名或vim插件。

3.强化你的工程能力:熟练使用Docker让你能将模型或分析部署成应用(比如用作提供预测的RESTAPI),从而让其他人也能使用你的成果。此外,你在数据科学工作流程中可能需要与存在于Docker容器中的其它应用进行交互,比如数据库。

Docker术语

在我们继续深入之前,熟悉一下Docker的术语会很有帮助:

·镜像(image):是你想要创建的东西的蓝图。比如:Ubuntu+TensorFlow,带有英伟达驱动程序和一个运行的Jupyter服务器。

·容器(container):是你实现的运行的镜像的实例化。你可以运行同一个镜像的多个副本。分清镜像和容器之间的差异非常重要,因为这是新入门者常常混淆的两个概念。如果你不清楚镜像和容器的差别,停下来再读一次。

·Dockerfile:用于创建镜像的配方。Dockerfile包含特殊的Docker语法。官方文档说:Dockerfile是一个文本文档,其中包含了用户可以在命令行调用的用来组装成镜像的所有命令。

·commit:和git类似,Docker容器提供了版本控制。通过commit发生的改变,你在任何时间都可以将你的Docker容器的状态保存为一个新镜像。

·DockerHub/ImageRegistry:人们可以发布公开(或私人)Docker镜像的地方,用于促进合作与共享。

·层(layer):对已有镜像的修改,由Dockerfile中的一个指令表示。层按次序应用到基础镜像上,以创建出最终的镜像。

本文将使用这些术语,如果你在阅读时忘记了,一定要回来查看!这些术语很容易混淆,尤其是在镜像和容器之间——所以你在阅读时要保持警惕!

安装Docker

你可以免费下载安装Docker社区版(DockerCommunityEdition),地址:https://www.docker.com/community-edition

创建你的第一个Docker镜像

在创建Docker容器之前,创建一个将用于定义镜像的Dockerfile会很有用。我们先慢慢解读一下下面的Dockerfile。你也可以在与本教程关联的GitHub库中找到这个文件:https://goo.gl/iE4Bdr

#reference:https://hub.docker.com/_/ubuntu/

FROMubuntu:16.04

#AddsmetadatatotheimageasakeyvaluepairexampleLABELversion="1.0"

LABELmaintainer="HamelHusain<www.github.com/hamelsmu>"

##Setenvironmentvariables

ENV.UTF-8LC_ALL=C.UTF-8

RUNapt-getupdate--fix-missing&&apt-getinstall-ywgetbzip2ca-certificates\

build-essential\

byobu\

curl\

git-core\

htop\

pkg-config\

python3-dev\

python-pip\

python-setuptools\

python-virtualenv\

unzip\

&&\

apt-getclean&&\

rm-rf/var/lib/apt/lists/*

RUNecho'exportPATH=/opt/conda/bin:$PATH'>/etc/profile.d/conda.sh&&\

wget--quiethttps://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86_64.sh-O~/anaconda.sh&&\

/bin/bash~/anaconda.sh-b-p/opt/conda&&\

rm~/anaconda.sh

ENVPATH/opt/conda/bin:$PATH

RUNpip--no-cache-dirinstall--upgrade\

multiprocessing\

sklearn-pandas

#OpenPortsforJupyter

EXPOSE7745

#SetupFileSystem

RUNmkdirds

ENVHOME=/ds

ENVSHELL=/bin/bash

VOLUME/ds

WORKDIR/ds

ADDrun_jupyter.sh/ds/run_jupyter.sh

RUNchmod+x/ds/run_jupyter.sh

#Runtheshell

CMD["./run_jupyter.sh"]

FROM语句

FROMubuntu:16.04

FROM语句包含了Docker最神奇的部分。这个语句指定了你想在上面进行创建的基础镜像。通过使用FROM指定一个基础镜像,Docker将会在你的本地环境中寻找名为ubuntu:16.04的镜像——如果它没有找到,它就会搜索你指定的DockerRegistry,默认是DockerHub:https://hub.docker.com/explore/。如果你需要经常在你的Ubuntu等操作系统上安装程序,那么这种分层机制就非常方便。你不必费心从头开始安装Ubuntu,而是可以直接在官方的Ubuntu镜像上开发!DockerHub上托管着种类繁多的镜像,包括那些不只是提供了一个操作系统的镜像,比如如果你想要一个已经安装了Anaconda的容器,你可以选择在官方的AnacondaDocker镜像上开发,地址:https://hub.docker.com/r/continuumio/anaconda3/。最重要的是,你也可以随时发布你构建的镜像,即使该镜像是通过在其它镜像上加层得到的!这有无尽的可能性。

在这个案例中,我们指定基础镜像为ubuntu:16.04,它会搜索名叫ubuntu的DockerHub库(https://hub.docker.com/_/ubuntu/)。镜像名之后的部分16.04是指定了你想要安装的基础镜像的版本的标签(tag)。如果你检索一下UbuntuDockerHub库,你会注意到不同版本的Ubuntu对应于不同的tag:

2017年12月的官方UbuntuDockerHub库截屏

比如,ubuntu:16.04、ubuntu:xenial-20171201、ubuntu:xenial和ubuntu:latest全都是指16.04版的Ubuntu,它们全都是同一个镜像的别名。此外,这里提供的链接指向了对应的Dockerfile,可用于构建每个版本的镜像。有时候你无法在DockerHub中找到Dockerfile,因为维护者可以自己选择是否将关于这些镜像的创建方式的Dockerfile包含进来。我个人觉得阅读一些Dockerfile有助于更好地理解Dockerfile。(但不要急,读完这篇教程再说!)

你需要特别注意一个标签,即:latest标签。这也是你在不为FROM语句指定标签时默认pull的镜像。比如说如果你的FROM语句是这样:

FROMubuntu

然后你就将pullubuntu:16.04镜像。为什么?——仔细看上面,你可以看到:latest关联的是16.04.

关于Docker镜像最后需要注意的一点:在从DockerHubpull随机的Docker镜像时要做出明智的判断。有恶意的人创建的镜像有可能会包含恶意软件。

LABEL语句

这个语句会为你的镜像添加元数据,而且是完全可选的。我增加这个语句的目的是为了让别人知道可以联系谁,同时也方便我搜索我的Docker容器,尤其是在一个服务器上同时运行着很多容器时。

LABELmaintainer="HamelHusain<youremail>"

ENV语句

ENV.UTF-8LC_ALL=C.UTF-8

这让你可以修改环境变量,而且相当直接,相关情况请参阅:https://docs.docker.com/engine/reference/builder/

RUN语句

这通常是最需要花功夫的地方,给出了你构建该Docker镜像所想要完成的任务。你可以运行apt-get和pipinstall等任意的shell命令来安装你需要的软件包和依赖包。

RUNapt-getupdate--fix-missing&&apt-getinstall-ywgetbzip2

build-essential\

ca-certificates\

git-core\

...

在这里我安装了一些我喜欢的实用工具,比如curl、htop、byobu,然后安装了Anaconda,之后还安装了一些基础Anaconda中没有的其它库(你可以在完整的Dockerfile中查看其它RUN语句)。

RUN语句后的命令与Docker没什么关系,只是一些你在安装这些软件包时需要运行的正常Linux命令,所以就算你不熟悉这些软件包或Linux命令也不要担心。另外,再给一个建议:当我最早开始学习Docker时,我查看了GitHub或DockerHub上的其它Dockerfile,然后将我需要的部分复制粘贴到了我的Dockerfile。

你可能注意到了RUN语句的格式。每个库或软件包都整齐地进行了缩进,而且为了可读性还按字母进行了排序。这是Dockerfile的普遍惯例,所以我建议你也这样做以便合作。

EXPOSE语句

如果你想公开一个端口,这个语句会很有用——比如,如果你从该容器或某个网络服务内实施一个JupyterNotebook。Docker的文档相当好地解释了EXPOSE语句:

EXPOSE指令实际上并没有发布该端口。它的功能是作为创建该镜像的人和运行该容器的人之间的一类文档,内容是关于打算发布的端口。要实际发布该端口,就要在运行该容器时在dockerrun上使用-p标志并且映射一个或多个端口,或者也可以使用-P标志发布所有端口并将它们映射到高阶端口。

VOLUME语句

VOLUME/ds

这个语句让你可以在Docker容器和主机计算机之间共享数据。VOLUME语句让你可以安装外部安装的卷。主机目录只有在容器运行时才声明(因为你可能在不同的计算机上运行该容器),而不会在定义镜像时声明*。目前你只指定了Docker容器内你想与主机容器共享的文件夹的名称。

Docker用户指南解释说:

主机目录是在容器运行时声明的:主机目录(挂载点)本质上取决于主机。这是为了保证镜像的可移植性,因为一个给定的主机目录无法保证在所有主机上都可用。由于这个原因,你不能在Dockerfile中挂载主机目录。VOLUME指令不支持指定host-dir参数。你必须在创建或运行容器时指定挂载点。

此外,这些卷的目的是将数据保存到容器的文件系统之外,当你要操作大量数据而且不希望你的镜像膨胀得很大时,这会很有用。当你保存一个Docker镜像时,在这个VOLUME目录中的任何数据都不会被保存为该镜像的一部分,但是在这个容器目录之外的数据会被保存。

WORKDIR语句

WORKDIR/ds

这个语句设置了工作目录,以便你在另一条命令中可以无需使用绝对路径就能索引特定的文件。例如这个Dockerfile中的最后一条语句是:

CMD[“./run_jupyter.sh”]

该语句就默认假设工作目录是/ds

ADD语句

ADDrun_jupyter.sh/ds/run_jupyter.sh

这条命令让你可以在Docker容器运行时将文件从主机计算机复制到该Docker容器。我使用这个命令来执行bash脚本以及将.bachrc文件等有用东西导入到容器中。

注意这里的主机容器的路径并没有完全指定,因为其主机路径是你在该容器运行时指定的背景路径(contextdirectory)的相对路径(后面会讨论)。

在我运行这个容器时,run_jupyter.sh正好在背景路径的根目录内,所以在该源文件之前没有路径。

用户指南中介绍说:

ADD<src>...<dest>

ADD指令从<src>复制新文件、目录或远程文件URL并将它们添加到路径<dest>的镜像的文件系统中。

CMD语句

Docker容器的设计思想是这些容器是短暂的,能保证运行完你想运行的应用就行了。但在数据科学方面,我们往往希望保持这些容器一直运行,即使它们之中并没有主动地运行着什么。很多人都通过运行bashshell来实现这一点(除非你终止它,否则它就不会停止)。

CMD[“./run_jupyter.sh”]

在上面的命令中,我运行了一个实例化一个JupyterNotebook服务器的shell脚本。但是,如果你没有什么要运行的特定应用而只是想保持你的容器运行(而不退出),你可以直接运行bashshell,只不过使用以下命令:

CMD["/bin/bash"]

这种方法是有效的,因为除非你退出,否则bashshell就不会终止;因此该容器会一直保持运行。

用户指南中介绍说:

在一个Dockerfile中只能有一个CMD指令。如果你列出了不止一个CMD,那么只有最后一个才有效。

CMD的主要目的是为正在执行的容器提供默认配置。这些默认配置可能包含一个可执行文件,或者也可以省略可执行文件,在这种情况下你还必须指定一个ENTRYPOINT指令。

创建你的Docker镜像

Dockerfile中的信息可真够多的。不要担心,后面的内容就相对很简单了。现在我们已经在Dockerfile中创建了我们的配方,是时候创造镜像了。你可以通过以下命令完成:

GitHub上也有:https://github.com/hamelsmu/Docker_Tutorial/blob/master/basic_tutorial/build_image.sh

这会创建一个Docker镜像(而不是容器;如果你不记得这两者之间的差异,请查阅文章前面的术语介绍),你可以在后面运行这个镜像。

从你的Docker镜像创建和运行容器

现在你已经准备好让这一切工作起来了!我们可以通过执行以下命令来调出环境:

同样GitHub也有:https://github.com/hamelsmu/Docker_Tutorial/blob/master/basic_tutorial/run_container.sh

运行完这个命令之后,你的容器就运行起来了!Jupyter服务器也运行起来了,因为在该Dockerfile最后有这个命令:

CMD[“./run_jupyter.sh”]

现在你应该可以通过其使用的端口访问你的JupyterNotebook了——在这个案例中可通过http://localhost:7745/访问,密码是tutorial。如果你是通过远程的方式运行这个Docker容器,你还必须设置本地端口转发,这样你才能通过你的浏览器访问你的Jupyter服务器。端口转发介绍:https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding

与你的容器交互

一旦容器设置完成并运行起来,下面这些命令就有用了:

·为容器附加一个新的终端会话。如果你需要安装一些新软件或使用shell,这会很有用。

·将你的容器的状态保存为新镜像。即使你一开始就在Dockerfile中配置了你想安装的所有库,随着时间的推移,你也可能还是需要对容器的状态进行很大的调整——通过交互来增加更多库和软件包。将你的容器的状态保存为镜像是很有用的,你后面可以将其分享出去或在上面加层。你可以使用dockercommitCLI命令将容器状态保存为新镜像:

dockercommit<container_name>new_image_name:tag_name(可选的)

比如说,如果我想将名为container1的容器的状态保存为名为hamelsmu/tutorial:v2的镜像,我可以直接运行这个命令:

dockercommitcontainer_1hamelsmu/tutorial:v2

你可能会疑惑镜像名之前的hamelsmu/是什么——这只是为了让之后将该容器推送到DockerHub的工作更轻松,因为hamelsmu是我的DockerHub用户名(后面会再谈这个问题)。如果你的工作要使用Docker,那么你的公司很可能有一个内部私有的Docker库,你也可以将你的Docker推送到那里。

·列出运行中的容器。当我忘记现在正在运行的容器的名称时,我就常常使用这个命令:

dockerps-a-fstatus=running

如果你在使用该命令时没有加上status=running,那么你就会看到你系统上的所有容器的列表(即使已经不再运行的容器也在)。这对查找旧容器而言很有用。

·列出你在本地保存的所有镜像。

dockerimages

·将你的镜像推送到DockerHub(或其它地方)。如果你想与其他人分享你的工作或将镜像保存到云上,这个命令就会很有用。注意你在做这件事时可不要分享任何私人信息(DockerHub上也有私有库)。

首先创建一个DockerHub库并给你的库起一个适当的名称,参考这里:https://docs.docker.com/docker-hub/repos/。然后要运行dockerlogin命令来连接到你在DockerHub或其它注册位置的账户。比如,要推送一个镜像到这个容器(https://hub.docker.com/r/hamelsmu/tutorial/),我首先必须将我的本地镜像命令为hamelsmu/tutorial(我可以选择任意标签名)。比如说,这个CLI命令就为:

dockerpushhamelsmu/tutorial:v2

将之前提到的Docker镜像推送到这个库,其标签为v2,参考:https://hub.docker.com/r/hamelsmu/tutorial/tags/。需要指出:如果你公开了你的镜像,那么其他人就可以直接在你的镜像上加层,就像本教程中我们在ubuntu镜像上加层一样。对于想要重现或延展你的研究的其他人来说,这非常有用。

你已经掌握了

现在你知道如何操作Docker了,你可以执行以下任务:

·与同事和朋友共享可重现的研究。

·通过将你的代码暂时迁移到所需的更大的计算环境中,无中断地赢得Kaggle竞赛。

·在你的笔记本电脑上的Docker容器内进行本地的原型开发,然后毫不费力地将同样的计算过程无缝迁移到服务器上,同时还能保留你喜欢的本地环境配置(你的别名、vim插件、bash脚本、自定义提示等)。

·使用Nvidia-Docker在GPU计算机上快速实例化运行TensorFlow、PyTorch或其它深度学习库所需的所有依赖包。(如果你从头开始做,这个过程将非常艰辛。)参阅后面的彩蛋。

·将你的模型作为应用发布,比如用作从Docker容器提供预测的RESTAPI。当你的应用Docker化了以后,就可以按照需要轻松地随意复制。

进阶阅读

到这里我们也只学到了Docker的一点皮毛,前面还有很多东西值得掌握。我很关注Docker领域,我认为数据科学家会常常遇到它,希望这篇文章能让你有足够的信心开始使用它。下面这些资源曾在我的Docker之旅中为我提供过帮助:

·有用的Docker命令:https://zaiste.net/posts/removing_docker_containers/

·更有用的Docker命令:https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes

·Dockerfile参考:https://docs.docker.com/engine/reference/builder/

·如何创建和推送到DockerHub上的库:https://docs.docker.com/docker-hub/repos/

彩蛋:Nvidia-Docker

我学习Docker最早的原因是要在单个GPU上做深度学习模型的原型开发,然后在我需要更多计算资源时再迁移到AWS上。我当时也在学习JeremyHoward的出色的Fast.AI课程(http://www.fast.ai/),并且希望与其他人分享我的原型设计。

但是,要将英伟达GPU的驱动程序等所有依赖包都包含以来,你不能使用Docker,而是要用Nvidia-Docker(https://github.com/NVIDIA/nvidia-docker)。这比使用vanillaDocker要多花一些功夫,但只要你理解了Docker,做起来就很简单。

我将我的Nvidia-Docker设置放在这里:https://github.com/hamelsmu/Docker_Tutorial/tree/master/gpu_tutorial,你可以用这个来进行练习。

文章到此结束,如果本次分享的layer怎么读和layering是什么意思的问题解决了您的问题,那么我们由衷的感到高兴!

最新文章