文档说:
要构建一个图像并将其存储在本地Docker服务器中,请使用
docker:publishLocal
我刚开始使用Docker,不熟悉“本地Docker服务器”的概念。那是什么,我应该在哪里查找 docker:publishLocal
的输出?
文档说:
要构建一个图像并将其存储在本地Docker服务器中,请使用
docker:publishLocal
我刚开始使用Docker,不熟悉“本地Docker服务器”的概念。那是什么,我应该在哪里查找 docker:publishLocal
的输出?
以下是Docker的主要组件:https://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components
"Docker服务器"在链接中描述的是"Docker守护进程"。Docker守护进程运行在本地计算机上,通常是由docker
二进制文件运行的命令的主要联系点。
Docker守护进程执行许多任务,包括:
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将尝试将镜像推送到https://registry.hub.docker.com/上的“username1”帐户中的公共Docker注册表。
如果设置为带有斜杠的字符串,例如 "my.server1/username1",则会将该字符串添加到镜像名称中。这类似于前面的情况,但 Docker 服务器将尝试在 DNS 中查找名为 "my.server1" 的服务器,并将其推送到该服务器而不是公共 Docker 注册表。docker run "${dockerRepository}/${projectName}:${version}"
从本地计算机或其他计算机中使用此镜像。target/docker/stage
。如果您将工作目录更改为此处并运行 docker build .
,则会使用该目录的内容构建一个镜像。找到了 源代码。看起来 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/ 目录下的一些输出
libraryDependencies
查看项目的依赖项。插件也会出现在那里,因为它们最终位于“Plugin”配置下。 - Jacek Laskowskisbt docker:publishLocal
将其发布到远程仓库,然后在.travis-ci.yml
内部使用docker push
进行推送:https://github.com/felipegutierrez/explore-akka/blob/master/build.sbt - Felipe
docker push
命令,因此如果您之前已登录到 Docker 帐户 (docker login
),它应该可以正常工作。通过 SBT 配置进行身份验证被忽略了,因为似乎在不改变 SBT 外部状态的情况下进行身份验证是不可能的(当时)。 - Gary Coadytarget/docker/stage
而不是target/docker
。我在两个目录下都尝试了docker build .
,只有target/docker/stage
有效。 - Andrew Swan