镜像

镜像结构

镜像结构: registry_name/repository_name/image_name:tag_name
例如:docker.io/library/alpine:3.12.0

搜索

docker search alpine #搜索alpine 镜像

下载镜像

直接下载

docker pull alpine #下载alpine镜像 默认下载latest Tag标签的镜像
下载的路径为 docker.io/library/alpine:latest <仓库名>/library/:

下载指定标签

docker pull alpine:3.12.0

关于镜像latest标签的解释

默认的 使用 docker pull <image_name> 获取镜像而不指定镜像tag时 会拉去该镜像的 latest版本
docker pull centos7 会将docker.io/library/centos7:latest 拉去到本地。
latest 标记 是一个指针 他指向了最近发行的一个版本 也就是说,letast和最后发行的版本 镜像实际上是同一个,使用docker images 或者 docker image ls 可以查看 IMAGE ID 发现ID值是一至的

查看本地镜像

docker image ls 或者docker images ⭐ 推荐使用第一种 个人比较喜欢第二种~~|| 咳咳

给镜像 打标签

语法

docker tag <仓库地址>/<仓库名>/<镜像名>:<标签名称>

例子

如下图:
image.png
docker tag a24bb4 docker.io/<hub.docker.com中注册的用户名>/alpine:20.10.21.2
可以发现🔥 IMAGE ID 并不需要写全,只要他能区分出镜像即可,当然 这是偷懒的办法 🌚 我建议你写全~

推送镜像到镜像仓库

docker push docker.io/suyan0909/alpine:20.10.21 # 因为我们推送镜像的ID和alpine:latest 的ID一至 所以它提示我们 它做了引用 并为实际的将镜像上传。
image.png

删除镜像

指定名称和标签

docker rmi <IMAGE NAME:TAG>

docker rmi suyan0909/alpine:20.10.21.2 # untagged 提示我们 只是删除了这个tag标签 因为我们有多个引用 只有将相同镜像ID的引用全部删除之后 改镜像文件才会销毁,类似于Linux中的硬链接
image.png

强制删除镜像文件

docker rmi -f <IMAGE ID>

docker rmi -f a24bb # 镜像ID依旧可以缩写 建议写全~ docker rmi -f指令 会递归的删除改镜像文件对应的所有Tag,然后再删除镜像文件
image.png

Docker 镜像特性

Docker 镜像位于Bootfs 之上 第一层镜像是BaseImage 在往上是 由应用一层层叠加的 镜像内容 最后组成完整的镜像文件 Baseimage是image的父级。

典型的Linux文件系统由bootfsrootfs两部分组成。
docker加载机制与传统linux 有着细微的差距,具体在于bootfs和rootfs

最顶层的容器是可写的,而镜像 是只读的,因为只读的原因 镜像文件是分层挂载的,它是增量变更的,所以 可能上GB的镜像文件 上传时只需要几十MB就可以了。
增量是Docker基于aufs 最棒的一点 当然现在使用 overlay 我现在使用overlay2 , 使用overlay2 请查看 🐋Centos7 安装Docker-ce

对于Docker而言 一般来讲 讨论镜像文件的大小意义不大,更应该关注的是增量部分的大小