Docker-tag
概述
我们都知道git的tag功能是为了将代码的某个状态打上一个戳,通过tag我们可以很轻易的找到对应的提交。
docker的tag似乎更加灵活,docker将文件等信息的变动抽象为一次次的commit,每一次commit以后可能走向不同的分支,当我们完成dockerfile的构建后,会生成一串无规则的字符串代表此次生成的ID,此时,tag的作用就是为他创建一个友好的NAME,方便我们对镜像库的管理。
docker images
docker images命令 查询本地的镜像
关于tag,我们比较关注REPOSITORY(名称),TAG(标签),IMAGE ID(镜像ID)三列。
tag的生成
创建运行容器时指定tag
手动指定docker tag
语法
<span style="color:#000000"><code>docker tag old-image[<span style="color:#009900">:old-tag</span>] new-image[<span style="color:#009900">:new-tag</span>]</code></span>
- 1
tag帮助
<span style="color:#000000"><code>[root@entel1 ~]# docker tag --help
Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Tag an image into a repository
-f, --force=false Force
--help=false Print usage</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-f 意思是强制覆盖
栗子
把entel_zmc_images :latest指定为entel_zmc_images:zmc_base
<span style="color:#000000"><code><span style="color:#000000">docker</span> <span style="color:#000000">tag</span> <span style="color:#000000">entel_zmc_images</span> <span style="color:#000000">entel_zmc_images</span><span style="color:#000000">:zmc_base</span></code></span>
- 1
ps.记住,tag中不能再包含:(冒号)了!
docker tag entel_zmc_images entel_zmc_images:zmc_base
,系统又帮我们加上了latest,也就是说,当我们不指定tag的时候,系统会自动帮我们补上latest的tag,然后去匹配,如果命中,就用对应的容器ID去创建新的tag。
当我们执行刚才命令的时候,其实还是存在一个entel_zmc_images:zmc_base的镜像,按理来说会发生重名,但是系统还是优先使用了ID为7c2b8e830743的镜像。
latest
这个latest其实在使用中不是最新的意思,而是默认值(defalut)的意思。
也就是说,如果在tag为可选的命令中,我们没有写上tag,如 docker pull entel_zmc_images:zmc_base vs docker pull entel_zmc_images
,前者有确定的tag,而后者没有,这时系统会自动添加一个:latest标签,然后去匹配。
这时如果latest对应的镜像不存在就会报错!
运行镜像
理解了latest,那么下面两种方式就很简单了。
<span style="color:#000000"><code><span style="color:#009900"># 运行默认镜像,默认会找tag</span>
docker run entel_zmc_images
<span style="color:#009900"># 运行指定tag的镜像</span>
docker run entel_zmc_images:zmc_base </code></span>
- 1
- 2
- 3
- 4
- 5
删除镜像
同理,我们直接删除某个name,系统只会删除latest标签的那一条记录,如
<span style="color:#000000"><code>docker rmi entel_zmc_images</code></span>
- 1
这个删除操作不会影响相同ID的其他镜像。
docker镜像的版本控制
如果需要升级某个docker镜像,我们可以这样做。
-
1.给每个新生成的镜像都打上相应版本的tag。此时可能存在image:latest、image:v1、image:v2等。
-
2.我们要从v1升级到v2,首先我们将导入的v2镜像强制重命名为image:latest,命令为
docker tag -f image:v2 image:latest
-
3.docker stop之前正在运行的容器
-
4.启用docker run image,此时image的等价镜像image:latest就是最新的V2镜像。
总结下步骤:load/tag/stop/run