对docker标签的概念感到困惑

时间:2021-06-11 13:54:17

标签: docker docker-registry docker-tag

我正在阅读一本书,发现了这条线:

<块引用>

标签只能应用于存储库中的单个图像,而单个图像可以有多个标签。例如,Docker Hub 上的 Java 存储库维护以下标签:7、7-jdk、7u71、7u71-jdk、openjdk-7 和 openjdk-7u71。所有这些标签都应用于同一张图片。

我的问题是:为什么一张图片会有多个标签?用不同的标签标记同一张图片的目的是什么?

2 个答案:

答案 0 :(得分:0)

我认为主要有两个原因。

首先是为了方便,所以你可以给同一张图片赋予多个别名。

但是您可以为图像提供其他(特殊)标签,以便将其推送到不同的注册表。

假设(例如)您正在使用 microk8s 并且您启用了注册服务。要推送您的本地映像,您必须使用以前名为 #!/home/fewx/anaconda3/bin/python3.8 import matplotlib.pyplot as plt import xarray as xr import numpy as np import pygrib import cartopy.crs as ccrs import cartopy.feature as cfeat from cartopy.io.shapereader import Reader from cartopy.feature import ShapelyFeature import cartopy import geopandas as gpd import matplotlib.ticker as mticker from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER ds = xr.open_dataset('/fewxops/Tom/learn_python/data/grib2/gfs.t00z.pgrb2.0p25.f024', engine='cfgrib', filter_by_keys={'typeOfLevel': 'isobaricInhPa'}) ds_z500=ds.sel(isobaricInhPa=500) fig = plt.figure(figsize=(10,10)) ax = fig.add_subplot(1,1,1, projection=ccrs.PlateCarree()) ax.contourf(ds_z500['longitude'], ds_z500['latitude'], ds_z500['t'], transform=ccrs.PlateCarree()) ax.add_feature(cfeat.COASTLINE.with_scale('50m'),edgecolor='black') ax.add_feature(cfeat.LAKES.with_scale('50m'), edgecolor='black',facecolor='none') ax.add_feature(cfeat.BORDERS.with_scale('50m'),edgecolor='black') gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True) gl.xlabels_top = False gl.ylabels_left = False gl.xlines = False gl.ylines = False gl.xlocator = mticker.FixedLocator([-180, -120, -60, 0, 60, 120, 180]) gl.ylocator = mticker.FixedLocator([-90, -45, 0, 45, 90]) gl.xformatter = LONGITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER plt.savefig('test_grib.png') 的标签来应用它。

在这种情况下,您的图像将有两个标签 localhost:32000/my-image:my-tagmy-image:my-tag。因此,要将其推送到 microk8s 注册表,您唯一需要做的就是发出命令 localhost:32000/my-image:my-tag(图像标签将被解析以获取要推送到的注册表的 URI ).

显然,上述概念可以应用于任何其他远程注册表。

答案 1 :(得分:0)

您可以将多个标签用于各种目的。例如,最受欢迎的是拥有“最新”图像。

想象一下,您正在提取最新 ubuntu 映像。 那将是“docker pull ubuntu:latest”。尝试拉取 ubuntu:20.04 - 你会发现你已经拉取了镜像。

注意: 一段时间后,ubuntu:latest 将不再与 ubuntu:20.04 相同,而是使用最新的标签。但是,您将始终拥有指向最新版本的 ubuntu 映像的指针,并且无论您在何处使用它,都无需更改标签。