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

文档说:

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

docker:publishLocal

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

Docker服务器

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

被描述为“Docker服务器”的是链接描述中的“Docker守护进程”。 Docker守护进程在本地机器上运行,通常是由docker二进制运行的命令的主要联系点。

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

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

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

publishLocal

SBT使用名为publishLocal的任务将publishLocal发布到本地Ivy / Maven存储库(这是只存在于您的机器上的东西)。

sbt-native-packager中的Docker支持尝试在Docker上下文中使用相同的任务,以便sbt docker:publishLocal在本地Docker服务器上构build一个映像。 就像发布到本地的Ivy或Maven一样,这个动作允许图像在本地可见,用于开发,但不会在本地机器之外显示。

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

然后,您可以使用docker run "${projectName}:${version}" ,但只能在本地机器上运行。

发布

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

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

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

如果设置为不带斜线的string,例如“username1”,则会将“username1 /”添加到图像名称。 当尝试推送图像时,Docker将尝试将该图像推送到位于https://registry.hub.docker.com/的公共Dockerregistry中的“username1”帐户。

如果它被设置为一个带有斜线的string,例如“my.server1 / username1”,那么这也会将该string添加到图像名称。 这与之前的情况类似,除了Docker服务器将尝试在DNS中查找名为“my.server1”的服务器,并推送到该服务器而不是公共Dockerregistry。

在实践中,它映射到

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

然后,您可以使用docker run "${dockerRepository}/${projectName}:${version}"从本地机器或其他机器使用此映像。

阶段

stage任务创build一个包含Docker镜像所有文件的目录,格式可以发送到Docker守护进程。 这个目录是target/docker 。 如果您将工作目录更改为此处并运行docker build . ,您将使用该目录的内容来构build图像。

find了源代码 。 看起来docker:publishLocal映射到docker:publishLocal docker build -t [dockerTarget]

我正在使用Play 2.3,它出现在目前正在使用sbt-native-packager 0.7.1。 我不确定如何确认这是我从SBT控制台实际使用的版本。 在0.7.2中添加了Docker支持,所以我想这就是为什么我没有看到任何事情发生。 0.7.1似乎是默默无闻。 我不确定这是为什么。 我希望它失败或什么。

提交更新升级到0.7.2,虽然比我预期的更困难。 使用sbt-native-packager 0.7.2,我现在看到一些输出位于target / docker /