镜像命名的最佳实践 - 每天5分钟玩转 Docker 容器技术(18)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

我们已经学会构建自己的镜像了。接下来的问题是如何在多个 Docker Host 上使用镜像。

这里有几种可用的方法:

  1. 用相同的 Dockerfile 在其他 host 构建镜像。

  2. 将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。

  3. 搭建私有的 Registry 供本地 Host 使用。

第一种方法没什么特别的,前面已经讨论很多了。我们将讨论如何使用公共和私有 Registry 分发镜像。

为镜像命名

无论采用何种方式保存和分发镜像,首先都得给镜像命名。

当我们执行 docker build 命令时已经为镜像取了个名字,例如前面:

docker build -t ubuntu-with-vi

这里的 ubuntu-with-vi 就是镜像的名字。通过 dock images 可以查看镜像的信息。

84.png

这里注意到 ubuntu-with-vi 对应的是 REPOSITORY,而且还有一个叫 latest 的 TAG

实际上一个特定镜像的名字由两部分组成:repository 和 tag。

[image name] = [repository]:[tag]

如果执行 docker build 时没有指定 tag,会使用默认值 latest。其效果相当于:

docker build -t ubuntu-with-vi:latest

tag 常用于描述镜像的版本信息,比如 httpd 镜像:

当然 tag 可以是任意字符串,比如 ubuntu 镜像:

小心 latest tag

千万别被 latest tag 给误导了。latest 其实并没有什么特殊的含义。当没指明镜像 tag 时,Docker 会使用默认值 latest,仅此而已。

虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。

所以我们在使用镜像时最好还是避免使用 latest,明确指定某个 tag,比如 httpd:2.3,ubuntu:xenial。

tag 使用最佳实践

借鉴软件版本命名方式能够让用户很好地使用镜像。

一个高效的版本命名方案可以让用户清楚地知道当前使用的是哪个镜像,同时还可以保持足够的灵活性。

每个 repository 可以有多个 tag,而多个 tag 可能对应的是同一个镜像。下面通过例子为大家介绍 Docker 社区普遍使用的 tag 方案。

假设我们现在发布了一个镜像 myimage,版本为 v1.9.1。那么我们可以给镜像打上四个 tag:1.9.1、1.9、1 和 latest。

我们可以通过 docker tag 命令方便地给镜像打 tag。

docker tag myimage-v1.9.1 myimage:1

docker tag myimage-v1.9.1 myimage:1.9

docker tag myimage-v1.9.1 myimage:1.9.1

docker tag myimage-v1.9.1 myimage:latest

过了一段时间,我们发布了 v1.9.2。这时可以打上 1.9.2 的 tag,并将 1.9、1 和 latest 从 v1.9.1 移到 v1.9.2。

命令为:

docker tag myimage-v1.9.2 myimage:1

docker tag myimage-v1.9.2 myimage:1.9

docker tag myimage-v1.9.2 myimage:1.9.2

docker tag myimage-v1.9.2 myimage:latest

之后,v2.0.0 发布了。这时可以打上 2.0.0、2.0 和 2 的 tag,并将 latest 移到 v2.0.0。

命令为:

docker tag myimage-v2.0.0 myimage:2

docker tag myimage-v2.0.0 myimage:2.0

docker tag myimage-v2.0.0 myimage:2.0.0

docker tag myimage-v2.0.0 myimage:latest


这种 tag 方案使镜像的版本很直观,用户在选择非常灵活:

  1. myimage:1 始终指向 1 这个分支中最新的镜像。

  2. myimage:1.9 始终指向 1.9.x 中最新的镜像。

  3. myimage:latest 始终指向所有版本中最新的镜像。

  4. 如果想使用特定版本,可以选择 myimage:1.9.1、myimage:1.9.2 或 myimage:2.0.0。

Docker Hub 上很多 repository 都采用这种方案,所以大家一定要熟悉。

下一节讨论如何使用使用公共 Registry。

二维码+指纹.png


本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/1928030


目录
打赏
0
0
0
0
346
分享
相关文章
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
127 57
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
108 58
|
14天前
|
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
147 11
将应用程序打包成Docker镜像时可能遇到哪些问题?
将应用程序打包成Docker镜像时可能遇到哪些问题?
273 77
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
43 1
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
157 12
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等