Docker构建标记存储库名称

Vil*_*oja 8 docker docker-build

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

我想知道的是你在构建图像时可以给出的标志.例如:

$ docker build -t ouruser/sinatra:v2 .
Run Code Online (Sandbox Code Playgroud)

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

我以为这将是图像名称和标签.但显然,该名称实际上是一些存储库名称?为什么我认为它是?好吧,因为如果你在这个列表之后用命令列出图像:

docker images
Run Code Online (Sandbox Code Playgroud)

你会得到这样的列表:

REPOSITORY          TAG     IMAGE ID      CREATED        SIZE
ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 M
Run Code Online (Sandbox Code Playgroud)

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

  1. 这个存储库在哪里?
  2. 我可以在不创建存储库的情况下命名图像吗?
  3. 该存储库在何处以及如何使用或可以使用?
  4. 我在哪里可以找到有关此存储库的更多信息?我只发现了这一点,而且说实话并不多:docker build docs
  5. 为什么使用包含两个部分的名称是常见的:somename/someothername?

谢谢您的帮助!

BMi*_*tch 17

我认为这里的混淆是"存储库"这个词.在Docker中,存储库是具有相同名称的图像的任何构建组,并且可能是多个标记."registry"服务器(如hub.docker.com或您自己的私有注册表)拥有多个存储库,例如公共注册表上的redis存储库.该存储库具有用于构建的不同版本的多个标记.

所以在这样的背景下,回答你的问题:

  1. ouruser/sinatra位于您当地的Docker主机上,直到您执行此操作 docker push
  2. 不,存储库和标记是图像的名称.
  3. 在系统本地时,您可以在本地使用此图像.将其推送到注册表后,您可以将其下载到可以访问该注册表的任何其他Docker主机.如果你这样做,docker save你可以将该图像保存docker load在另一台主机上.
  4. 我确信在docs.docker.com上有文档覆盖这个,但我从课堂上学到了.
  5. username/imagebase格式即将支持在hub.docker.com中推送到您自己的命名空间.如果没有这个,那么制作第一个"Redis"图像的人称之为"redis",而下一个人创建自己的名为"redis-improved"的存储库,我们很快就会混淆一些令人困惑的名字,其中不清楚是谁创造了什么是一个有信誉的形象.您在本地制作的图像不需要该命名,但仍然鼓励使用,因为从hub.docker.com提取的图像可能缺少用户名,如果它们由Docker自己维护的话.如果没有您的用户名,您将无法知道自己下载的图像以及自己构建的图像.

  • 值得添加的是 5) 类似的 `server[:port]/repo:tag` 用于 [将图像推送到私有注册表](https://docs.docker.com/engine/reference/commandline/tag/ #tag-an-image-for-a-private-repository)。示例:`192.168.1.1:5000/my-image:v3` (2认同)