如何管理您的Docker映像

这是关于在BaseSpace中管理Docker Image的详细文档。本文档假定开发人员已经为本机应用程序设置了本地开发环境。请在继续之前确保您拥有本地运行的本机应用程序虚拟机。


在熟悉了码头工人

原生应用程序由三个基本组件组成:输入表单、docker映像和输出报告。一个Docker映像本质上是一个轻量级的虚拟机,只有文件系统和应用程序安装的依赖,没有任何系统级别的配置。Docker映像存储在Docker注册表中,BaseSpace可以访问它。

泊坞窗IO项目最近已经开始,是一个新的概念,很多开发商不熟悉。我们恳求开发商花一些时间寻找到多克尔理解它是如何工作的。这Docker网站具有广泛的文档,既具有全面又易于遵循的例子。本指南将有许多突出显示的常用案例与Docker突出显示,但更高级使用Docker请参考码头工人的文档

码头工人提供了一个很好交互式教程在其网站上,将带你通过码头工人的基本原理。我们鼓励开发人员试用此互动教程,如果他们不熟悉Docker。在一些快速步骤中,您将学习Docker的基础知识!yobet亚洲

还有一个伟大的Docker教程可供选择http://www.coolgarif.com/brain-food/using-docker-as-a-development-environment这将使新开发人员熟悉Docker的概念以及如何将其作为开发环境。


快速Docker速成课程

将Docker映像看作应用程序的装运容器。这个运输容器可以容纳运行脚本所需的所有不同类型的代码、文件和依赖项。容器的内容可以变化,但用于BaseSpace应用程序的Docker映像(容器)只能在Linux环境中运行。

当您在本地使用Docker时,这里有几件事要注意:

  1. 在虚拟框中安装和运行本地本机应用程序虚拟机的内部安装和运行

  2. 你必须SSH到你的VM中,然后你可以在VM中运行一个Docker映像

  3. 当您在本地运行Docker映像时,它是一个交互式环境,因此您可以添加文件,挂载文件夹,以及更多的应用程序

  4. 一旦你对你的Docker应用程序感到满意,并使用BaseSpace测试了它,你就可以打包Docker映像并将其“推”到Docker注册表(类似于github架构)。

  5. 然后BaseSpace可以访问泊坞形象,为您的应用程序,并在AWS机下面的计算统计的BaseSpace环境中运行它:

原始应用程序aws实例类型(s)
实例的家庭 实例类型 处理器拱门 VCPU. ecu. 存储器(GIB) 实例存储(GB) EBS优化可用 网络性能
一般用途 cc2.8xlarge. 64位 32. 88. 60.5 4x840 - 10千兆位4.

笔记:目前,只有一种实例类型可用,但将来开发人员将能够通过callbacks.js脚本形成建设者

以下是Docker网站上的幻灯片,提供了Docker的概述:

http://www.docker.io/yobet亚洲learn_more/


Docker术语备忘单

这是在整个文档中使用的最常见的Docker术语的备忘单。

泊坞窗服务

Docker服务是在本机应用程序虚拟机上运行的Docker守护程序。虽然此服务正在运行,但它将允许您在该机器上制作下面列出的所有Docker命令。在Basespace / Amazon云基础架构启动应用程序时,Docker服务还安装了Basespace将旋转的AMI。

码头工人形象

泊坞窗图像是包装了你的软件或分析管道的文件系统。该图像是所有组成应用程序的文件的集合,每个改变原始图像存储为一个单独的层。每当你承诺一个码头工人形象的时候,你所创建的泊坞窗图像上一个新层,但原始图像和每一层不变。

Docker映像的详细描述请参见码头工人的文档

码头工人注册表

泊坞窗注册表是哪里泊坞窗图像可以存储和运行程序的时候代表用户通过BaseSpace最终访问。使用搬运工推命令,您可以将您的Docker映像发送到要存储和保存的注册表。Docker图像存储在Docker注册表中的存储库中。每个存储库对每个用户或帐户都是唯一的。

有许多可用于BaseSpace应用两个注册表,一个是公共码头登记处而另一种是Basespace私有Docker注册表

Docker存储库

阿泊坞库是用来存储图像多克尔一个命名空间。举例来说,如果你的应用程序被命名为你好,世界您的用户名或注册表的命名空间是测试,Docker存储库将存储在Docker Registry中的存储库中将命名测试/ helloworld


泊坞窗命令小抄

这是您将在开发您的本机应用程序时使用的最常用Docker命令的备忘单。有关Docker命令的更详细文档,请参阅码头工人的文档

Docker Pull.

  • 须藤搬运工人拉:从docker注册表下载一个docker映像

Docker图像(列表图像)

  • sudo码头工人的图片:列出所有本地下载的图像
  • Sudo docker images——digests=true:列出所有本地下载的Docker映像及其摘要。这是在BaseSpace中发布应用程序所必需的。

泊坞窗运行

  • sudo docker run -i -t repo_name command_to_run:具有一定的命令和跳转到正在运行的容器交互运行码头工人图像。

repo_name.=[docker_username] / [docker_image_name]Command_to_run=要在交互式docker容器中运行的命令,通常我们使用/bin/bash命令。

Docker PS -A(列表容器)

  • 须藤泊坞窗PS -a:列出所有的本地Docker容器(先前与运行命令来执行)的

码头工人提交(保存更改本地)

  • Sudo docker提交container_id image_name:提交到本地泊坞窗容器制造在本地保存所做的任何更改的变化。

container_id.可以从上面找到什么须藤泊坞窗PS -a命令。这IMAGE_NAME是否应用此更改的本地图像的名称,格式相同repo_name以上。

泊坞窗推送(在泊坞登记保存更新的映像)

  • sudo docker推送repo_name:推到泊坞窗注册表中的所有本地提交的修改和更新由指定的码头工人形象repo_name与更改。

repo_name.=[docker_username] / [docker_image_name]

Docker停止

  • 须藤泊坞窗停止$(须藤泊坞窗PS -a -q):停止所有本地运行的Docker容器

Docker RM(删除/删除Docker容器或图像)

  • 须藤泊坞窗RM $(须藤泊坞窗PS -a -q):删除/删除所有本地Docker容器
    • Sudo docker rm $(Sudo docker images -q):从你的本地机器中删除所有的docker映像

先决条件

在开始使用以下内容之前,必须为本机应用程序设置本地开发环境。此外,本机应用虚拟机需要安装和运行。当您拥有通过SSH登录到虚拟机的终端时,您将能够与Docker进行交互。

如果你还没有达到这个状态,请参考设置您的本机开发环境在开发人员门户的文档中。


Docker注册表

Docker注册表是存储码头图像的位置。对于Basespace本机应用程序,公共Docker注册表和私有Docker注册表都可以使用。

公共码头登记处

公共码头工人注册由多克在主持index.docker.io..其他Docker用户可以通过index.docker.io找到存储在Public Docker注册表中的所有映像。

隐私

这些图像都是公共,任何其他用户都可以下拉您的图像。其他用户没有能力修改存储在Docker库中的任何图像。

如何推送到公共码头登记处

一旦您准备在公共Docker注册表中将Docker映像存储,即可键入

须藤搬运工推repository_name

在哪里存储库姓名在提交映像时在本地指定。当使用Public Docker Registry时,repositoryname是以下结构[用户名] / [image_name]

注意:如果这是您第一次推送到Public Registry,您将被要求创建一个用户名、密码和注册一个电子邮件地址。在你可以推之前,你将必须确认你的电子邮件地址。

如何从公共码头登记处提取

要从公共Docker注册表中提取图像,可以简单地输入

sudo docker pullopository_name

在哪里存储库姓名在提交映像时在本地指定。当使用Public Docker Registry时,repositoryname是以下结构[用户名] / [image_name]

拉请求将开始在本地拉动图像的所有层。某些图像比其他图像大,所以此请求可能需要一些时间才能完成。

Basespace私有Docker注册表

该BaseSpace私人码头工人注册处主办,由BaseSpace团队维护。它在docker.illumina.com托管。

隐私

存储在私有Docker注册表中的所有图像只能由开发人员访问。通过开发人员门户在BaseSpace中创建存储库,其中开发人员可以推送和存储其图像。

创建您的码头工人库

  1. 转至BaseSpace开发者门户网站
  2. 点击我的应用程序
  3. 点击码头工人存储库

  4. 输入新名称空间。您将在创建此命名空间下存储所有Docker图像。这类似于公共注册表的Docker用户名,但不用于登录私有注册表。命名空间在私有注册表中的所有命名空间中都必须是唯一的,并且有些人被限制使用(例如BaseSpace。)

  5. 点击创建命名空间

  6. Namespace现已创建,您可以将图像存储在Basespace私有Docker注册表中

如何登录到私人码头工人注册

登录私有注册表与登录公共注册表略有不同。当你被要求登入私人登记处时,你必须提供以下资料:

  • 用户名: 这是你的BaseSpace用户名,在所有情况下,这是您用于登录BaseSpace的电子邮件地址
  • 密码: 这是你的BaseSpace密码,是您登录BaseSpace帐号时使用的密码
  • 电子邮件: 这是你的BaseSpace电子邮件,在大多数情况下,这将与您的用户名相同。

使用公共注册表,用户名和电子邮件是不同的,用户名是命名空间。使用私有注册表,用户名和电子邮件是相同的,用户名不是命名空间。

如何推私人码头注册表

一旦你准备好在私有docker注册表中存储你的docker映像,你可以简单地输入

须藤搬运工推docker.illumina.com/repository_name

在哪里docker.illumina.com/repository姓名在提交映像时在本地指定。当使用私有Docker注册表时,存储库名称如下所示[命名空间] / [image_name].名称空间是在Developer Portal中创建的。

或者,您也可以使用docker.illumina.com.与刚刚repository_name推动他们。这可以用来向公共和私人码头工人注册管理机构之间轻松推。

注意:将要求您使用用户名,密码和电子邮件地址登录。

如何从私人Docker注册表拉

要从私有Docker注册表中提取图像,可以简单地输入

sudo docker pull docker.illumina.com/repository_name

在哪里docker.illumina.com/repository姓名在提交映像时在本地指定。当使用私有Docker注册表时,存储库名称如下所示[命名空间] / [image_name].名称空间是在Developer Portal中创建的。

拉请求将开始在本地拉动图像的所有层。某些图像比其他图像大,所以此请求可能需要一些时间才能完成。


修改现有的Docker映像来创建自己的Docker映像

要开始创建自己的Docker容器,可以使用现有的hello world Docker容器作为基本映像,也可以使用Docker注册表中不同的现有容器。

在基Ubuntu的镜像运行的Hello World

在公共码头登记处存在许多基础容器,这里有两个是一个很好的起点,ubuntu忙盒子容器。

登录虚拟机终端时,键入以下内容:

sudo docker拉ubuntu

这将下载(拉)下ubuntu泊坞窗容器本地运行的本机应用程序的虚拟机。该容器有一个叫做命令回声在它文件夹,我们可以使用以下命令运行此命令:

sudo docker运行ubuntu / bin / echo hello world

定义:

  • 苏达- 装置执行以下命令作为虚拟机的用户

  • 码头工人运行- 装置在一个新的容器运行的命令

  • ubuntu- 我们想要在内部运行命令的图像的名称

  • /斌/回声-要在容器中运行的命令

  • 你好,世界- 对于输入回声命令

响应应该回声回来你好,世界.这意味着您已经下载了基本的映像。

有关更多详细信息,请参阅Docker Hello World文档

拉另一个泊坞窗图片

拉公众码头工人注册表不同的码头工人的形象,只需键入以下内容:

sudo docker pull [用户名] / [image_name]

此处列出了Docker团队创建的基础Docker图像列表:https://index.docker.io/u/library/.这些图像中的任何一个都可以用作BaseSace本机应用程序的基础图像。

例子

如果我们想拉下basespace / fastqc码头图像,BaseSpace.是docker用户名和fastqcDocker映像的名称

须藤搬运工拉basespace / fastqc

这将下载fastqcDocker映像到本地虚拟机。在公共Docker注册表中可以找到许多其他Docker映像。

以下是使用现有Docker Image作为基础的Python Web应用程序的示例:

http://docs.docker.io/en/latest/examples/python_web_app/

创建自己的Docker图像

当您在终端中,通过SSH登录到虚拟机,并选择并下载了一个基础Docker图片从您想要用作您的原始应用程序虚拟机的公用存储库,您可以开始使用交互式Docker环境开始构建新图像!

创建新的码头工人形象,为您的应用程序的步骤很简单:

  1. 使用交互模式运行基础码头图像-我命令

    • 使用虚拟箱共享文件夹安装功能,允许您首先将文件夹安装到本机VM,然后通过添加将该安装到Docker映像的内容复制到Docker Image-v / host_folder:/ image_folder在哪里host_folder是VM中的文件夹的名称image_folder是您希望将文件复制到的文件夹的名称。
  2. 到多克尔运行过程

  3. 现在您已经在Docker容器中了,您可以执行许多操作

    • 使用以下命令安装依赖项apt-get.
    • 安装并运行vim以在新图像中编辑文件
    • 使用FTP服务器将必要的文件拉到Docker映像中
  4. 一旦您对您对容器进行的更改感到满意并通过本地测试您的应用程序发送到本地代理FormBuilder工具中的功能,您可以犯罪你的形象在局部发生了变化,然后对公共Docker存储库(以及私有BaseSpace Docker注册表)中新的或现有映像的更改

  5. 现在,该图像是通过访问和BaseSpace,一旦你准备把它回顾,我们可以查看和发布在BaseSpace所有用户的应用

从下载的图像启动交互式Docker容器并附加到该过程

如果您希望以交互方式使用的Docker映像的名称为图片,你可以使用以下命令为Docker映像运行一个交互式容器:

ID = $(须藤搬运工运行-i -t -d IMAGE /斌/庆典)须藤搬运工附上$ ID

笔记:如果有一个文件夹已安装到您希望在交互式状态下安装到Docker Image的本机虚拟机的文件夹,只需添加-v / host_folder:/ image_folder运行命令在哪里host_folder是VM中的文件夹的名称image_folder是您希望将文件复制到的文件夹的名称。

使用已挂载的文件夹示例:

ID=$(sudo docker run -i -t -d -v /host_folder:/image_folder IMAGE /bin/bash

您的终端现在将改为用户在虚拟机上,你会在泊坞窗容器。现在你可以使用以下常见的泊坞窗命令与您泊坞窗图像交互,并准备这是一个BaseSpace应用。-v / host_folder:/ image_folder:ro将使此新文件夹只读。


有用的Ubuntu命令

终端支持所有Ubuntu命令。软件包可以使用apt-get.到多克尔容器,这里是一个例子,其中VIM编辑器安装:

易于得到安装的vim

您还可以安装FTP客户端或SCP.命令将文件传输到Docker容器上:

scp mtyagi@sd-qmaster: / home / mtyagi / somefile.txt

安装您的应用程序需求以便运行,包括SDK,文件,参考基因组等。


将文件添加到图像中

使用共享文件夹中的虚拟框功能,以您的主机和本机应用程序的虚拟机之间共享文件夹。

一旦份额被创建,创建您希望将安装文件复制到虚拟机上的文件夹。

创建文件夹后,使用

sudo mount -t vboxsf -o uid=$ uid,gid=$ gid share [destination_folder_name]

将该卷安装到虚拟机上的目标文件夹。

现在,添加安装文件夹复制到上面的命令在创建交互式Docker容器时,如本指南的该部分所示。您现在将能够访问此数据并将其复制到您的Docker图像中以进行应用程序使用!


Genomes文件夹

在原生应用虚拟机中,你会发现基因组文件夹。在此文件夹中,在本地虚拟机上,您只会发现phix参考基因组。为减小虚拟机的大小,我们只有有限的基因组可用于本地测试。但是,我们正在努力将所有Igenomes和许多其他引用集成到我们的基因组文件夹。

除此之外基因组在虚拟机文件夹,在BaseSpace运行(而不是局部)的参考基因组的一个更强大的集合。我们将发布什么,我们都很快提供一个列表。

基因组文件夹可以将泊坞窗图像上继被复制将文件添加到图像中以上。


将更改提交到本地

完成本地创建和测试您的本机应用程序并希望提交更改后,首先通过键入首先退出Docket容器:

出口

现在,你应该在虚拟机的终端中,输入以下命令:

sudo docker提交$ id [docker_username] / [image_name]

例如,要提交更改为用户BaseSpace.fastqc_demo应用程序:

ID = $(须藤搬运工运行-i -t -d basespace / fastqc_demo /斌/庆典)须藤搬运工承诺$ ID basespace / IMAGE_NAME

在哪里IMAGE_NAMEfastqc_demo或一个新名字。

笔记:确保在提交或推送这些更改之前从Docker映像中删除不需要的文件,因为所有这些文件都将捆绑到Docker映像中。


将Docker Image的更改推送到Docker注册表

一旦你满意你提交的修改,现在是时候对这些变化推向多克尔注册表,以便您可以指向BaseSpace到您的应用程序,发布应用程序,并让BaseSpace管理休息。

要将Docker映像发送到公共Docker注册表,只需键入以下内容:

sudo docker推动[docker_username] / [image_name]

例如,推动变化basespace / fastqc_demo应用程序:

sudo docker推送Baseaspace / FastQC_DEMO

已知的Docker限制

  1. 在此刻,在多克尔,存在对能够在多克尔图像中存在AUFS层的数量的限制。这个数字是42,并且基本上是一个新的层上的每个提交创建。不过,也有已经由我们在此讨论的社区实施了一些解决方法:https://github.com/dotcloud/docker/issues/1171

    • 导出和导入图像是一种解决方案,但这会导致图像提交时丢失历史记录,所以这不是一个好主意,但solomonstre在上面链接的线程中对此进行了讨论。
    • 以下是Docker中的常规导出/导入工作流程:
      1. sudo docker导出$ container_id> image.tar
      2. Cat Image.tar> Sudo Docker Import - Image_Flat.tar
  2. 其他Docker开发人员在尝试将大型提交层推向Docker注册表时报告了问题,这有时会导致未能将新Docker映像推向注册表。Docker意识到这一点,并积极研究解决方案。

  3. 目前,我们不允许从您的Docker映像发出请求或连接。我们正在创建一个本地应用可以访问的白名单,但这还没有到位。