1. 概述
本文将引导我们学习 Docker 中的标签概念。
Docker 提供了在 Docker Hub 存储库上存储镜像的支持。Docker 标签为 Docker 镜像提供了一个独特的标识。Docker 存储库中的多个相似镜像通过标签具有不同的版本。在这里,我们将学习如何使用 docker build
和 docker tag
命令为镜像打标签。
2. 了解 Docker 标签
Docker 标签有助于维护构建版本以将镜像推送到 Docker Hub。Docker Hub 允许我们根据名称和标签将镜像分组在一起。多个 Docker 标签可以指向特定的镜像。基本上,Docker 标签类似于 Git 中的特定提交。Docker 标签只是镜像 ID 的别名。
标签名称必须是 ASCII 字符串,并且可能包括小写和大写字母、数字、下划线、点号和破折号。此外,标签名称不能以点或破折号开头,且只能包含 128 个字符。
3. 使用 Docker 标签构建镜像
在继续之前,让我们首先创建一个示例 Dockerfile 来演示打标签:
FROM centos:7
RUN yum -y install wget
RUN yum -y install unzip
RUN yum -y install java-1.8.0-openjdk
RUN yum clean all
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME
在上述 Dockerfile 中,我们使用基于“centos:7”的命令安装 Java。
3.1 使用单个 Docker 标签构建镜像
在 Docker 中,我们可以在构建时为镜像打标签。以下是我们打标签命令的示例:
$ docker build -t baeldung-java:5 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos:7
---> eeb6ee3f44bd
Step 2/2 : RUN yum -y install wget
---> Using cache
---> 46ee47a7422d
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:5
在这里,上述命令中,我们为 Docker 镜像提供了“baeldung-java:5”作为标签。Docker 标签在 Docker 中很有用,用于维护构建版本以将镜像推送到 DockerHub。通常,使用任何 Docker 镜像进行部署或回滚到较旧版本时会使用版本化。
我们还可以使用以下语法通过用户名和镜像名称提供标签:
$ docker build -t baeldung/baeldung-java:5 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos:7
---> eeb6ee3f44bd
....
Successfully built 46ee47a7422d
Successfully tagged baeldung/baeldung-java:5
在这里,上述命令中,我们提供了用户名“baeldung”与镜像名称“baeldung-java”以及标签“5”。
3.2 使用多个 Docker 标签构建镜像
在 Docker 中,我们也可以为镜像分配多个标签。这里,我们将使用 docker build
命令在一个命令中为镜像分配多个标签。
为了演示,让我们查看以下 Dockerfile 的命令:
$ docker build -t baeldung-java:5 -t baeldung-java:6 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos:7
---> eeb6ee3f44bd
....
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:5
Successfully tagged baeldung-java:6
在这里,我们可以看到为 imageId “46ee47a7422d” 创建了两个标签“baeldung-java:5”和“baeldung-java:6”。
3.3 不带任何标签构建镜像
我们也可以不使用任何标签构建 Docker 镜像。但是为了跟踪镜像,我们应该始终为镜像名称提供标签。让我们查看不使用标签构建镜像的命令:
$ docker build -t baeldung-java .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos:7
---> eeb6ee3f44bd
...
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:latest
在这里,上述命令中,我们没有使用任何标签构建镜像,因此 Docker 默认为图像提供标签为最新“baeldung-java:latest”。
Docker 总是指向最新稳定发布使用最新标签。旧发布甚至可以被称为最新。但我们无法预测它是主要版本还是次要版本。
4. 使用 docker tag 命令为镜像打标签
到目前为止,我们讨论了使用 docker build
命令为镜像打标签。但是,我们也可以显式地使用 docker tag 命令为镜像打标签。为镜像打标签仅创建了图像名称或 imageId 的别名。在这里,我们将探索这两种方法来为镜像打标签。
Docker 图像名称的一般格式如下:
<user-name>/<image-name>:<tag-name>
在上述片段中,冒号后的组件表示附加到图像的标签。
让我们查看使用图像名称打标签的命令:
$ docker tag baeldung-java:6 baeldung-java:8
使用 imageId 打标签的命令如下:
$ docker tag 46ee47a7422d baeldung-java:9
让我们检查所有至今创建的图像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
baeldung-java 5 46ee47a7422d 13 minutes ago 370MB
baeldung-java 6 46ee47a7422d 13 minutes ago 370MB
baeldung-java 8 46ee47a7422d 13 minutes ago 370MB
baeldung-java 9 46ee47a7422d 13 minutes ago 370MB
baeldung-java latest 46ee47a7422d 13 minutes ago 370MB
centos 7 eeb6ee3f44bd 7 months ago 204MB
在这里,我们将找到至今创建的所有图像。
5. 使用 docker pull 命令中的标签
Docker 标签对于创建图像或从 Docker Hub 存储库拉取图像非常有用。在我们的 Dockerfile 中,我们使用命令 FROM centos:7。这将拉取公共 centos 版本“7”的公共镜像。
我们也可以带有或不带有标签拉取镜像。
让我们查看带有特定标签的命令:
$ docker pull centos:7
不带任何标签的 docker pull 命令:
$ docker pull centos
上述命令将从公共 Docker Hub 存储库拉取 “centos:latest” 镜像。我们还可以对图像应用多个标签,通常用于指定主版本和次版本。
6. 总结
在本文中,我们学习了如何在 Docker 中创建和管理标签。我们探索了打标签的不同方式。
使用 docker build 命令,我们首先为镜像打标签。之后,我们查看了 docker tag 命令。此外,我们还探索了使用标签的 docker pull 命令。