什么是sbt-native-packager的docker:publishLocal呢?

时间:2014-07-19 01:18:38

标签: sbt docker sbt-native-packager

The docs说:

  

要构建映像并将其存储在本地Docker服务器中,请使用

     

docker:publishLocal

我刚刚开始使用Docker并且不熟悉“本地Docker服务器”的概念。那是什么,我应该在哪里查找docker:publishLocal的输出?

2 个答案:

答案 0 :(得分:23)

Docker服务器

这里描述了Docker的主要组件:https://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components

所谓的“Docker服务器”是链接描述中的“Docker守护程序”。 Docker守护程序在本地计算机上运行,​​通常是由docker二进制文件运行的命令的主要联系点。

Docker守护程序执行许多任务,包括:

  • 启动容器
  • 停止容器
  • 查询容器状态
  • 构建图像(容器的“文件系统”)
  • 将图像推送到Docker索引或其他图像服务器 (从构建机器外部看图像)
  • 管理容器,如果停止则重新启动它们

sbt-native-packager将任务映射到Docker操作

publishLocal

SBT使用名为publishLocal的任务将资产发布到本地Ivy / Maven存储库(这只是您的计算机上存在的内容)。

sbt-native-packager中的Docker支持尝试在Docker上下文中使用相同的任务,以便sbt docker:publishLocal在本地Docker服务器上构建映像。就像在本地发布到Ivy或Maven一样,此操作允许图像在本地可见以进行开发,但不会使其在本地计算机外部可见。

实际上,它映射到命令docker build -t "${projectName}:${version}"

然后,您可以将此图片与docker run "${projectName}:${version}"一起使用,但只能在本地计算机上使用

公布

SBT使用名为publish的任务将资产发布到远程Ivy / Maven存储库。这需要额外的配置,以描述发布图像的位置。

sbt-native-packager还尝试将此任务映射到Docker上下文中的相应操作。因此,插件在本地构建映像,然后将映像推送到适当的远程映像存储库。

为此,您需要添加dockerRepository设置。

如果将其设置为不带斜线的字符串,例如“username1”,这会在图片名称中添加“username1 /”。当尝试推送图像时,Docker将尝试将图像推送到“username1”帐户中https://registry.hub.docker.com/的公共Docker注册表。

如果将其设置为带有斜杠的字符串,例如“my.server1 / username1”,这也会将该字符串添加到图像名称中。这与前一种情况类似,除了Docker服务器将尝试在DNS中找到名为“my.server1”的服务器,并推送到该服务器而不是公共Docker注册表。

实际上,它映射到

docker build -t "${dockerRepository}/${projectName}:${version}" . // working directory at `target/docker/stage` docker push "${dockerRepository}/${projectName}:${version}"

然后,您可以使用docker run "${dockerRepository}/${projectName}:${version}"在本地计算机或其他计算机上使用此图像。

阶段

stage任务创建一个目录,其中包含Docker镜像的所有文件,格式已准备好发送到Docker守护程序。该目录为target/docker/stage。如果将工作目录更改为此处并运行docker build .,则可以使用该目录的内容构建映像。

答案 1 :(得分:0)

找到the source code。似乎docker:publishLocal映射到docker build -t [dockerTarget]

我正在使用Play 2.3,它源于当前使用的sbt-native-packager 0.7.1。我不确定如何确认我实际在SBT控制台上使用的版本。 Docker支持在0.7.2中添加了,所以我想这就是为什么我没有看到任何事情发生的原因。它似乎在0.7.1中无声无息。我不确定为什么会这样。我预计它会失败或者什么。

提交change to upgrade Play to 0.7.2虽然比我预期的要困难。使用sbt-native-packager 0.7.2,我现在看到一些输出位于target / docker /