跳转到主要内容

正确构建、标记和运输共享Docker容器的正确方法。

项目描述

FORK

虽然https://github.com/6si/shipwright将保持更新,但我只能访问PyPI上的dockhand名称。

Shipwright在git仓库中按正确顺序构建共享Docker镜像,并使用git的修订/分支信息进行标记发布,这样您就永远不会失去对镜像来源的追踪。

这是构建和发布您的镜像到Docker Hub或您自己的私有仓库等地方的完美工具。查看我们的动机,了解我们为什么构建它以及它为您解决了哪些痛点。

安装

Shipwright是一个简单的Python脚本,您可以使用pip进行安装

$ pip install shipwright

快速入门

安装后,只需将您的项目切换到包含多个Dockerfile且在git中的项目。

在项目的根目录中添加一个名为.shipwright.json的json格式文件。至少它应包含Shipwright配置的版本号和一个namespace,该namespace是您的Docker Hub用户名或您的私有仓库的URL。

1.0是当前版本的配置。

{
  "version": 1.0,
  "namespace": "[your docker hub name or private repository]"
}

此外,您的配置文件可以将目录名称映射到替代的Docker仓库。例如,这里有一个为Docker Hub用户 shipwright 创建的 .shipwright.json 文件,它将git仓库的根目录映射到Docker镜像 shipwright/shared,以及将 /foo 目录映射到 shipwright/awesome_sauce

{
  "version": 1.0,

  "namespace": "shipwright",
  "names": {
    "/": "shipwright/shared",
    "/foo": "shipwright/awesome_sauce"
}

现在,您只需将目录切换到您的git仓库下的任何目录,并运行

$ shipwright

这将递归遍历所有目录,查找包含Dockerfile的目录。Shipwright将按顺序构建这些Dockerfile,并默认使用 <namespace>/<dirname>:<git commit> 标签进行标记,以及 <namespace>/<dirname>:<git branch><namespace>/<dirname>:latest

工作示例

我们有一个shipwright示例项目,如果您想立即尝试此功能,可以使用。

$ git clone https://github.com/6si/shipwright-sample.git
$ cd shipwright-sample
$ shipwright

注意:在本地构建时,您可以使用任何您想要的用户名。在上面的例子中,我们使用了“shipwright”。除非您使用“push”命令,否则不会发布任何内容。对于您自己的项目,在上面的例子中将“shipwright”替换为您的(或您组织的)官方Docker Hub用户名或私有仓库。

请注意,如果您再次运行 shipwright,它将立即返回而不会执行任何操作。Shipwright足够智能,知道没有任何更改。

当您切换git分支时,Shipwright表现得尤为出色。

$ git checkout new_feature
$ shipwright

请注意,shipwright只重新构建了共享库和service1,忽略了其他项目,因为它们具有共同的git祖先。然而,运行 docker images 将会显示git仓库中的所有镜像都已标记为最新的git修订版本、分支和 latest

事实上,当Shipwright构建容器时,它会重写Dockerfile,以便它们需要来自当前git修订版本的标签的基础镜像。这确保了整个构建过程是确定性和可重复的。

构建

默认情况下,如果您不提供任何参数运行shipwright,它将构建您的git仓库中的所有Dockerfile。您可以通过指定一个或多个 specifiers 来选择构建更少的镜像。例如,您可以通过在命令行上指定其名称来构建单个镜像及其依赖项。

$ shipwright <namespace>/some_image

运行 `shipwright –help’ 获取更多有关specifiers及其用法的示例。

发布

Shipwright可以使用一条命令构建您的镜像并将它们推送到远程仓库。

$ shipwright push

如果您愿意,您可以直接推送最新的镜像而不进行构建。

$ shipwright push --no-build

构建时使用的相同specifiers也可以与 push 一起使用。您可以使用此功能在一步中构建整个树,然后推送特定的镜像,如下所示。

$ shipwright build
$ shipwright push -e <namespace>/public_image

0.4.0 (2016-06-13)

  • 隔离所有git功能,以便创建可插拔的源代码控制包装器。

  • 更有效的必需构建检测。(问题 #63

  • 隔离所有zipper使用,供应商zipper库。

0.2.2 (2015-01-07)

  • 修复在通过Unix套接字与Docker通信时缺失 tls 的错误。

0.2.1 (2015-01-01)

  • 强制标记以支持Docker 1.4.1

  • 需要 docker-py >= 0.6

  • .shipwright.json 中添加了 assert_hostname 选项。

  • 添加了命令行选项 --x-assert-hostname 以禁用TLS使用时的主机名检查。这对于boot2docker很有用。

0.2.0 (2014-12-31)

  • 添加了 shipwright pushshipwright purge

  • 增加了对指定符 -u-d-e-x 的支持

0.1.0 (2014-09-10)

  • 构建和标记容器

  • 将配置移动到 .shipwright.json

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

dockhand-0.4.0.tar.gz (17.9 kB 查看哈希值)

上传时间

构建分布

dockhand-0.4.0-py2.py3-none-any.whl (21.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由...