84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我本地下载了一个 MySql 镜像,想安装官方的。docker pull mysql 后它老自动把本地的给装上去了。
docker pull mysql
删除本地的mysql docker rmi -f mysqldocker images 查看确实没了,但是再次 docker pull mysql,发现安装的还是之前的那个……
docker rmi -f mysql
docker images
怎么跳过本地的 MySql ,安装官方的镜像啊? 谢谢
认证高级PHP讲师
是不是有什么容器正在使用这个 mysql 镜像?或者你是否重新docker tag过这个镜像?或者使用其它版本的mysql镜像?或者在使用基于 debian:jessie 的镜像?
docker tag
debian:jessie
要知道镜像并非单一文件,而是存储层的集合。当你执行 docker rmi -f mysql 的时候,实际上是删除 mysql:latest 这个 tag,因此第一行一般是 Untagged: mysql:latest。
mysql:latest
tag
Untagged: mysql:latest
接下来的逻辑是,如果没有其它tag指向该存储层,则会真实删除该存储层,然后继续查询下一层的存储层是否还有人在使用,没有继续删除,直到某一层发现还有容器或者镜像依赖该存储层,那么就停止删除。所以当你执行 docker rmi 的时候,可以观察一下出现了多少个 Deleted: sha256: ...,这就是删除了多少层,其它的并未删除。
docker rmi
Deleted: sha256: ...
那么假如你重新 docker tag 了这个mysql镜像,那么当你执行 docker rmi 的时候,只会执行 untag 的操作,而不会真的删除存储层。
untag
又或者系统有其它镜像是基于相同的基础镜像 debian:jessie 的,那么docker rmi 也只会删到这一层就停止了,以后每次 pull 也是从这层开始。
pull
同样,这种分层存储的概念也会影响你的 docker pull。 当你执行docker pull的时候,会查看官方 docker:latest 的每一层的校验值,然后到本地比对,看看哪些已经存在,如果存在就不重复pull,直接使用当前存储层,如果不存在则pull新的。
docker pull
docker:latest
拿刚才的假如你重新docker tag的例子,如果你之前重新tag过该 mysql:latest镜像,那么docker rmi实际上没有删除该镜像,而再次 docker pull mysql 的时候,发现所有存储层本地都有,那必然不需要再次 pull,直接将最顶层tag为 mysql:latest即可。这种情况无需担心,也不必强迫重新下载,因为sha256sum可以确保镜像文件和官网的一致性。
sha256sum
所以你的问题需要看具体情况是什么来说。一般来说,在生产环境不建议使用 latest 标签,而是明确指定版本,这样才可能升级维护。
latest
雷雷
是不是有什么容器正在使用这个 mysql 镜像?或者你是否重新
docker tag
过这个镜像?或者使用其它版本的mysql镜像?或者在使用基于debian:jessie
的镜像?要知道镜像并非单一文件,而是存储层的集合。当你执行
docker rmi -f mysql
的时候,实际上是删除mysql:latest
这个tag
,因此第一行一般是Untagged: mysql:latest
。接下来的逻辑是,如果没有其它
tag
指向该存储层,则会真实删除该存储层,然后继续查询下一层的存储层是否还有人在使用,没有继续删除,直到某一层发现还有容器或者镜像依赖该存储层,那么就停止删除。所以当你执行docker rmi
的时候,可以观察一下出现了多少个Deleted: sha256: ...
,这就是删除了多少层,其它的并未删除。那么假如你重新
docker tag
了这个mysql镜像,那么当你执行docker rmi
的时候,只会执行untag
的操作,而不会真的删除存储层。又或者系统有其它镜像是基于相同的基础镜像
debian:jessie
的,那么docker rmi
也只会删到这一层就停止了,以后每次pull
也是从这层开始。同样,这种分层存储的概念也会影响你的
docker pull
。 当你执行docker pull
的时候,会查看官方docker:latest
的每一层的校验值,然后到本地比对,看看哪些已经存在,如果存在就不重复pull,直接使用当前存储层,如果不存在则pull新的。拿刚才的假如你重新
docker tag
的例子,如果你之前重新tag
过该mysql:latest
镜像,那么docker rmi
实际上没有删除该镜像,而再次docker pull mysql
的时候,发现所有存储层本地都有,那必然不需要再次 pull,直接将最顶层tag
为mysql:latest
即可。这种情况无需担心,也不必强迫重新下载,因为sha256sum
可以确保镜像文件和官网的一致性。所以你的问题需要看具体情况是什么来说。一般来说,在生产环境不建议使用
latest
标签,而是明确指定版本,这样才可能升级维护。雷雷