正确构建、标记和运输共享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 push 和 shipwright purge。
增加了对指定符 -u、-d、-e 和 -x 的支持
0.1.0 (2014-09-10)
构建和标记容器
将配置移动到 .shipwright.json
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
dockhand-0.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 76bbd67ad2e6efd53c5c84cc37962d9b51ff1b96e0f490058605c417ec40cd08 |
|
MD5 | ec97d2139ac5f7dc37b719d0a09b19ea |
|
BLAKE2b-256 | 6188d5e4bbb102540b119f4fd0f72cfb6d2238cba268d0453557864d0b187909 |
dockhand-0.4.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b394084d1820fb811132ef5c37c87f343886e53884b846bb112f1e8a4b518c5 |
|
MD5 | d01f76dfb5337f6063b824a66ba8e649 |
|
BLAKE2b-256 | eba7da1b81c7dba0222c60fa0747ca4ebc773285636337aea70644d00a2c180b |