15

可以通过 docker build 命令轻松构建 docker 镜像。

我想知道的是您在构建图像时可以提供的 t 标志。例如:

$ docker build -t ouruser/sinatra:v2 .

根据文档, t 标志用于标记和命名目的。name 是 ':' 之前的部分,tag 是它之后的部分。所以在我们的例子中,名称是ouruser/sinatra,标签是v2。

我认为这将是图像名称和标签。但显然,该名称实际上是某个存储库名称?为什么我认为是?好吧,因为如果您要在此之后使用命令列出图像:

docker images

你会得到这样的清单:

REPOSITORY          TAG     IMAGE ID      CREATED        SIZE
ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 M

砰! 大震动!您以为您正在创建一个带有名称的图像,但您指定了一些存储库!与此相关,我有一些问题:

  1. 这个存储库位于哪里?
  2. 我可以在不创建存储库的情况下命名图像吗?
  3. 这个存储库在哪里以及如何使用,或者可以使用?
  4. 在哪里可以找到有关此存储库的更多信息?我只发现了这个,说实话并没有什么意义:docker build docs
  5. 为什么通常使用由两部分组成的名称:somename/someothername?

谢谢您的帮助!

4

1 回答 1

24

我相信这里的混淆是“存储库”这个词。在 Docker 中,存储库是具有相同名称和可能具有多个标签的映像的任何构建组。一个“注册”服务器,如 hub.docker.com 或您自己的私有注册中心,拥有多个存储库,例如公共注册中心上的 redis 存储库。该存储库具有用于不同版本的构建的多个标签。

因此,在这样的背景下,回答您的问题:

  1. ouruser/sinatra 位于您的本地 Docker 主机上,直到您执行docker push
  2. 不,存储库和标签是图像的名称。
  3. 在您的系统上本地时,您可以在本地使用此映像。将其推送到注册表后,您可以将其下拉到有权访问该注册表的任何其他 Docker 主机。如果你这样做,docker save你可以将该图像保存docker load在另一台主机上。
  4. 我确信在 docs.docker.com 上的某个地方有相关文档,但我是从课堂上学到的。
  5. 用户名/图像库格式开始支持推送到 hub.docker.com 中您自己的命名空间。否则,制作第一个“Redis”图像的人将其称为“redis”,而下一个制作自己的存储库的人称为“redis-improved”,我们很快就会陷入混乱的名称中,不清楚是谁制作了什么以及制作了什么是一个有声望的形象。您在本地制作的镜像不需要该命名,但仍然鼓励使用,因为如果您从 hub.docker.com 提取的镜像由 Docker 自己维护,它们可能缺少用户名。没有您的用户名,您将不知道您下载了哪些图像以及您自己构建了哪些图像。
于 2016-06-14T18:02:34.043 回答