Docker 容器注册表(如 Docker Hub)是用于托管和共享 Docker 容器的平台。虽然默认的 Docker Hub 专注于公共容器,但大多数云提供商(如 AWS 和 GCP)将运行自己的私有容器注册表。
什么是 Docker 注册表?
容器注册表是命名 Docker 映像的在线存储和分发系统。它与 NPM 之类的包管理器非常相似,因为它也可以存储不同版本的图像。任何拥有注册帐户的人都可以通过运行docker push 一个username/imagename 参数来登录和上传构建的图像:
docker push anthonyheddings/testcontainer
然后,如果您想在其他地方使用该容器,您可以以相同的方式下载它:
docker pull anthonyheddings/testcontainer
除非您正在构建镜像FROM scratch,否则您可能正在从 Docker Hub 中提取。Docker Hub 是默认的 Docker 注册表。
当您为应用程序编写 Dockerfile 时,您可以使用以下FROM 命令从 Docker Hub 扩展镜像:
从 Ubuntu
对于一些容器,比如ubuntu,它们是Docker 官方镜像,这意味着它们被广泛使用,你不需要指定上传它的用户名(如果你只是输入,这可能是多余的ubuntu/ubuntu)。
标记容器
Docker 注册表中的容器被组织成存储库。它们与 Git 存储库的概念非常相似,除了不是分支,而是使用不同的标签组织容器。
标签只是提供一种更好的方式来管理版本控制和发布的标签。您可以将它们分配给任何已完成的构建。您可以使用 Major.minor.patch 格式的标签标记图像,而不是引用构建 ID,并且能够轻松分辨出哪个图像是哪种格式,或者您的组织喜欢的任何格式。
如果不指定标签,Docker 将自动应用“latest”标签。每当您从集线器拉取映像时,latest 除非您指定版本号,否则您很可能会拉取。
您可以使用docker tag 手动标记的图像,但它更容易使用-t 与docker build。
docker build -t 用户名/图像:标签。
当您将映像推送到 Docker Hub 或任何其他注册表时,您将能够根据它们的标签下拉不同的版本。
Docker Hub 的替代品
Docker Hub 是默认设置,因此如果您不指定其他设置,则所有与注册表一起使用的 Docker 命令都将附加 hub.docker.com 作为默认设置。
但是,许多云提供商将提供自己的 Docker 注册表作为服务,通常与他们提供的其他容器相关服务集成。例如,有Google Container Registry,它与 Cloud Run 及其 Kubernetes 服务配合得很好。
您可以切换到新的注册表,只需将注册表 URL 附加到所有容器引用。对于 GCR,那将是 gcr.io:
gcr.io/anthonyheddings/test
与 Docker Hub 非常相似,您需要使用docker login登录到注册表。
AWS 拥有Elastic Container Registry,可以很好地与Elastic Container Service和Elastic Kubernetes Service 配合使用。
Azure 有Azure Container Registry,可与他们的 Kubernetes 服务配合使用。