19

文档说:

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

docker:publishLocal

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

4

2 回答 2

32

泊坞窗服务器

Docker 的主要组件如下所述:https ://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components

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

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

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

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

发布本地

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. 如果您将工作目录更改为 here 并运行docker build .,您将使用该目录的内容构建映像。

于 2014-07-20T11:39:05.727 回答
1

找到源代码。似乎docker:publishLocal映射到docker build -t [dockerTarget]

我正在使用 Play 2.3,从源代码显示当前正在使用 sbt-native-packager 0.7.1。我不确定如何从 SBT 控制台确认这是我实际使用的版本。Docker 支持是在 0.7.2 中添加的,所以我想这就是我看不到任何事情发生的原因。在 0.7.1 中似乎什么也不做。我不确定为什么会这样。我预计它会失败或其他什么。

提交了将 Play 升级到 0.7.2的更改,尽管这比我预期的要困难。使用 sbt-native-packager 0.7.2,我现在看到一些输出位于 target/docker/

于 2014-07-19T01:50:44.907 回答