在此定义几个术语,因为它们相互关联:
镜像: 这是用于以容器方式运行应用程序的文件系统层和元数据。每个镜像必须在Docker引擎上有一个ID。
引用: 这是指向镜像的指针。有不同类型的引用,可能是仅镜像ID,通常是存储库和标记,有时您将使用sha256哈希而不是可更改的标记来固定到特定检验和。重要的是,您可以对同一镜像具有多个指针,并且除了镜像ID之外,没有必要拥有任何对镜像的引用。当您删除引用时,Docker将仅删除该指针,除非它是该镜像ID的最后一个指针。
注册表: 这是保存镜像的服务器。与Git服务器保存源代码或二进制文件的构件服务器类似,注册表是您推送和拉取镜像的地方。
存储库: 在注册表服务器上,映像目录的路径就是存储库。如果您未使用默认的Docker Hub注册表,则包括注册表主机名和端口。在镜像引用中,此存储库是冒号和标记之前的部分。
标记: 存储库中的特定镜像。如果未指定标记,Docker将默认使用标记名称“latest”。这是冒号后面的部分,并且通常用于版本编号。
以一个引用示例为例:
registry-server:5000/team/service-a:build-42
"registry-server:5000" 是注册表服务器名称(和端口),您将推送/拉取此镜像的地方。
"registry-server:5000/team/service-a" 是存储库。
"build-42" 是标签。
"registry-server:5000/team/service-a:build-42" 是引用。
与其他系统不同,您将docker镜像推送和拉取到注册表服务器时,使用包含存储库和标签的引用来定义镜像的目标和源,而不是特定的文件。因此,要将镜像推送到不同的位置,您需要使用docker tag
命令创建一个新的引用,将相同的镜像指向新的存储库和标签,然后对该引用运行推送命令。
通常,当有人提到“图像名称”时,他们指的是存储库名称(如果您想单独指定标记)或完整引用,您可以使用它来拉取或推送镜像。
如何列出我的存储库?
docker image ls --format '{{.Repository}}' | sort -u
我加入了sort -u
来去重输出,因为您可能有多个具有相同仓库但不同标签的镜像。