主要是重新认清container, image, tag的区别
senario:
之前有这样一篇笔记:🔗 [制作avifenc-butteraugli docker镜像 - Truxton's blog] https://truxton2blog.com/create-avifenc-butteraugli-docker-image/
笔记里有这样的步骤:
但这一步写的不好,因为每次都要用docker ps -a和docker images来查找ID,导出avif docker以后还要用container ID和image ID进行删除。
修改方案:
step 1:
首先docker run的时候就要指定container name:
修改为:
$ docker run --name debian_container_avif_webp -it debian /bin/bash
这样就能在docker ps -a里面看到container的名字:
step 2:
现在假设在这个container(container name: debian_container_avif_webp )里面做了一些工作,现在要保存它:
$ docker commit debian_container_avif_webp debian:avif_webp_modified
在上面这条命令里:
container name: debian_container_avif_webp
repository: debian
image tag: avif_webp_modified
这样用docker images查看的时候就会区分原始debian和修改过的debian:
如果执行相同的commit命令多次,每次制作的docker image都会保存下来,但只有最近保存的那个会有 debian:avif_webp_modified 的标记,其他的都会变成<none>:<none>. 所以如果每次保存都是有意义的,就要在每次保存的时候都使用不同的名字。
step 3:
最后的docker save的命令也可以用image tag代替了(注意要用 REPOSITORY:TAG 的格式,而不仅仅是TAG):
$ docker save debian:avif_webp_modified | gzip > avif_webp.tar.gz
step 4:
删除container和image
也不需要用container ID/image ID了,直接用container name和image repo:tag就可以:
# 删除容器
$ docker rm debian_container_avif_webp
# 删除镜像
$ docker rmi debian:avif_webp_modified
所以现在那篇构建docker avif webp的笔记就优化完成了