(十)镜像命名的最佳实践

在多个Docker Host 上使用 镜像方法:

  • 用相同的 Dockerfile 在其他 host 构建镜像。
  • 将镜像上传到公共 Registry(比如 Docker Hub),Host 直接下载使用。
  • 搭建私有的 Registry 供本地 Host 使用。

(1)为镜像命名

​ 无论采用何种方式保存和分发镜像,首先都得给镜像命名。当我们执行 docker build 命令时已经为镜像取了个名字,例如前面:docker build -t ubuntu-with-vi

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

root@cuiyongchao:/dockerfile# docker images ubuntu-with-vi
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu-with-vi      latest              218e302a1e28        22 hours ago        167MB
root@cuiyongchao:/dockerfile# 

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

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

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

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

docker build -t ubuntu-with-vi:latest

tag 常用于描述镜像的版本信息, tag 可以是任意字符串 :

root@cuiyongchao:/dockerfile# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
my-image                     latest              a0fdf1e57442        4 hours ago         1.23MB
ubuntu-with-dockerfile3      latest              e14aba1bf84b        7 hours ago         167MB
ubuntu-with-dockerfile2      latest              898ef2d48c22        8 hours ago         167MB
ubuntu-with-vim-dockerfile   latest              b75528ee6f18        22 hours ago        167MB
ubuntu-with-vi               latest              218e302a1e28        22 hours ago        167MB
ubuntu                       latest              d70eaf7277ea        4 days ago          72.9MB
busybox                      latest              f0b02e9d092d        13 days ago         1.23MB
httpd                        latest              3dd970e6b110        2 weeks ago         138MB
centos                       latest              0d120b6ccaa8        2 months ago        215MB
hello-world                  latest              bf756fb1ae65        9 months ago        13.3kB
root@cuiyongchao:/dockerfile# 

(1)小心 latest tag

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

​ 虽然 Docker Hub 上很多 repository 将 latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。所以我们在使用镜像时最好还是避免使用 latest,明确指定某个 tag,比如 httpd:2.3,ubuntu:xenial。

(2)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。
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/cuiyongchao007/p/13927163.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!