通过示例将容器发布到 Quay

sme*_*eeb 1 versioning docker

我试图弄清楚如何将版本化的 Docker 容器发布到 Quay.io,但在他们的文档中没有看到如何这样做。从文档:

# Login to Quay.io
docker login quay.io (will now be prompted for username + password)

# Get your <containerID>
docker ps -l

# Tag that container by <containerId>
docker commit <containerId> quay.io/<myUsername>/<myRegistry>

# Now publish it to Quay.io
docker push quay.io/<myUsername>/<myRegistry>
Run Code Online (Sandbox Code Playgroud)

然而这让我很困惑:

  • 如果我想要我的容器标记/版本化,例如,1.0.0-SNAPSHOT, or 1.0-rc, or 2.0or3.1.6-G.A怎么办?我在哪里指定实际的标签名称/版本?
  • 当我运行docker push命令时,Docker 如何知道要发布哪个(标记/版本化)容器?

lar*_*sks 5

首先,值得注意的是,您不会将容器推送到注册表。你推图像docker commit您问题中的命令基于活动容器创建新图像。

当为图像分配标签时——使用docker tag更常见的命令 [1],或者使用时docker commit——标签的格式是[<registry>/]<repository>[:<tag>],其中[...]用于表示选项组件。因此,例如,您可以像这样在 Docker Hub 上标记针对您的帐户的图像:

docker tag smeeb/webserver
Run Code Online (Sandbox Code Playgroud)

这将被分配latest标签,因为您没有明确指定一个。要显式分配标签awesome而不是latest

docker tag smeeb/webserver:awesome
Run Code Online (Sandbox Code Playgroud)

当您为备用注册表标记映像时,您将注册表名称作为标记的一部分包括在内,如下所示:

docker tag <imageId> quay.io/smeeb/webserver
Run Code Online (Sandbox Code Playgroud)

在这里,quay.io是注册表,smeeb/webserver是存储库,您已经隐式分配了latest标签。您可以明确表示:

docker tag <imageId> quay.io/smeeb/webserver:1.0.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

等等。使用docker commit.

[1]:我看到 usingdocker tag更常见的原因是 use ofdocker commit通常被认为是一种反模式。使用 aDockerfile创建您的新映像,这样可以更轻松地重现相同的配置(并允许您对映像的配置进行版本控制)。