深入解析Docker镜像分层原理

内容分享7小时前发布
1 0 0

Docker镜像是构建容器的基础,理解如何有效地管理和使用镜像是非常重要的。以下是一些关于Docker镜像管理的技巧和命令介绍。

镜像管理

镜像结构和原理

深入解析Docker镜像分层原理
镜像即创建容器的模版,含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于方便和快速的创建并启动容器。
镜像含里面是一层层的文件系统,叫做 Union FS(联合文件系统),联合文件系统,可以将几层目录挂载到一起(就像千层饼,洋葱头,俄罗斯套娃一样),形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样,镜像通过这些文件再加上宿主机的内核共同提供了一个 linux 的虚拟环境,每一层文件系统叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建提交的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层,实际上也不需要知道里面有几层,结构如下。
深入解析Docker镜像分层原理
一个典型的 Linux文件系统由 bootfs 和 rootfs 两部分组成 bootfs(boot file system) 主要包含bootloader和kernel,bootloader主要用于引导加载 kernel,Linux 刚启动时会加载bootfs文件系统,当boot加载完成后,kernel 被加载到内存中后接管系统的控制权,bootfs 会被 umount 掉。
rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件,不同的 linux 发行版(如 ubuntu 和 CentOS ) 主要在 rootfs 这一层会有所区别。一般的镜像通常都比较小,官方提供的Ubuntu镜像只有60MB多点,而CentOS基础镜像也只有200MB 左右,一些其他版本的镜像甚至只有几MB,比如:busybox 才1.22MB,alpine镜像也只有5M左右。镜像直接调用宿主机的内核,镜像中只提供rootfs,也就是只需要包括最基本的命令,配置文件和程序库等相关文件就可以了。下图就是有两个不同的镜像在一个宿主机内核上实现不同的rootfs。
深入解析Docker镜像分层原理
容器、镜像和父镜像关系
深入解析Docker镜像分层原理

查看镜像的分层结构


[root@ubuntu2404 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
6e909acdb790: Pull complete 
5eaa34f5b9c2: Pull complete 
417c4bccf534: Pull complete 
e7e0ca015e55: Pull complete 
373fe654e984: Pull complete 
97f5c0f51d43: Pull complete 
c22eb46e871a: Pull complete 
Digest: sha256:706959c57d76560ed77ea37b7e0a203388b5b12c153c4f820449b9d43d292f53
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@ubuntu2404 ~]# docker image history nginx:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
53a18edff809   5 weeks ago   CMD ["nginx" "-g" "daemon off;"]                0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   STOPSIGNAL SIGQUIT                              0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   ENTRYPOINT ["/docker-entrypoint.sh"]            0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   COPY 30-tune-worker-processes.sh /docker-ent…   4.62kB    buildkit.dockerfile.v0
<missing>      5 weeks ago   COPY 20-envsubst-on-templates.sh /docker-ent…   3.02kB    buildkit.dockerfile.v0
<missing>      5 weeks ago   COPY 15-local-resolvers.envsh /docker-entryp…   389B      buildkit.dockerfile.v0
<missing>      5 weeks ago   COPY 10-listen-on-ipv6-by-default.sh /docker…   2.12kB    buildkit.dockerfile.v0
<missing>      5 weeks ago   COPY docker-entrypoint.sh / # buildkit          1.62kB    buildkit.dockerfile.v0
<missing>      5 weeks ago   RUN /bin/sh -c set -x     && groupadd --syst…   117MB     buildkit.dockerfile.v0
<missing>      5 weeks ago   ENV DYNPKG_RELEASE=1~bookworm                   0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   ENV PKG_RELEASE=1~bookworm                      0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   ENV NJS_RELEASE=1~bookworm                      0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   ENV NJS_VERSION=0.8.9                           0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   ENV NGINX_VERSION=1.27.4                        0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   LABEL maintainer=NGINX Docker Maintainers <d…   0B        buildkit.dockerfile.v0
<missing>      5 weeks ago   # debian.sh --arch 'amd64' out/ 'bookworm' '…   74.8MB    debuerreotype 0.15
[root@ubuntu2404 ~]# docker inspect nginx
[
    {
        "Id": "sha256:53a18edff8091d5faff1e42b4d885bc5f0f897873b0b8f0ace236cd5930819b0",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:706959c57d76560ed77ea37b7e0a203388b5b12c153c4f820449b9d43d292f53"
        ],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2025-02-05T21:27:16Z",
        "DockerVersion": "",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.27.4",
                "NJS_VERSION=0.8.9",
                "NJS_RELEASE=1~bookworm",
                "PKG_RELEASE=1~bookworm",
                "DYNPKG_RELEASE=1~bookworm"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 192004242,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/97bbdaa9d3dc6aaedecc78e04dfbb90cf30087f0ea3ce2a7f8861f9a03e04b01/diff:/var/lib/docker/overlay2/86742b703bc2747f874f27a2ab16715d8bf9a1169bb7519f9b1047cd35463fc3/diff:/var/lib/docker/overlay2/37fae3ff500adb63378552a0d79a78b8fd6a79f33fbfaa7c59b280e2e8b0e6ca/diff:/var/lib/docker/overlay2/0b7baecc37940f29b2d313dc74c767ec6f2d8583d2e5066327dd0094fc3fe65d/diff:/var/lib/docker/overlay2/4dc9118100718f98078ae3d36f10d4bb8706331f600b1af0d3b3b7650e392bc6/diff:/var/lib/docker/overlay2/04d5000912d5fb75825407675fd23e1a738b8c9435c4ab2f1e3f4fe40156336b/diff",
                "MergedDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/merged",
                "UpperDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/diff",
                "WorkDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:1287fbecdfcce6ee8cf2436e5b9e9d86a4648db2d91080377d499737f1b307f3",
                "sha256:135f786ad04647c6e58d9a2d4f6f87bd677ef6144ab24c81a6f5be7acc63fbc9",
                "sha256:ad2f08e39a9de1e12157c800bd31ba86f8cc222eedec11e8e072c3ba608d26fb",
                "sha256:d98dcc720ae098efb91563f0a9abe03de50b403f7aa6c6f0e1dfb8297aedb61f",
                "sha256:aa82c57cd9fe730130e35d42c6b26a4a9d3c858f61c23f63d53b703abf30adf8",
                "sha256:d26dc06ef910f67b1b2bcbcc6318e2e08881011abc7ad40fd859f38641ab105c",
                "sha256:03d9365bc5dc9ec8b2f032927d3d3ae10b840252c86cf245a63b713d50eaa2fd"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]
[root@ubuntu2404 ~]# docker save nginx:latest -o nginx.tar
[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG           IMAGE ID       CREATED        SIZE
nginx         latest        53a18edff809   5 weeks ago    192MB
hello-world   latest        74cc54e27dc4   7 weeks ago    10.1kB
busybox       1.37-uclibc   298c155189b9   5 months ago   1.23MB
[root@ubuntu2404 ~]# ll nginx.tar -h
-rw------- 1 root root 188M Mar 18 05:03 nginx.tar
[root@ubuntu2404 ~]# tar xf nginx.tar -C /data/
[root@ubuntu2404 ~]# ll /data/
total 28
drwxr-xr-x  3 root root 4096 Mar 18 05:05 ./
drwxr-xr-x 24 root root 4096 Mar 18 02:43 ../
drwxr-xr-x  3 root root 4096 Feb  5 21:27 blobs/
-rw-r--r--  1 root root  362 Jan  1  1970 index.json
-rw-r--r--  1 root root 2286 Jan  1  1970 manifest.json
-rw-r--r--  1 root root   31 Jan  1  1970 oci-layout
-rw-r--r--  1 root root   88 Jan  1  1970 repositories
[root@ubuntu2404 ~]# cat /data/manifest.json 
[{"Config":"blobs/sha256/53a18edff8091d5faff1e42b4d885bc5f0f897873b0b8f0ace236
cd5930819b0","RepoTags":["nginx:latest"],"Layers":["blobs/sha256/1287fbecdfcce6e
e8cf2436e5b9e9d86a4648db2d91080377d499737f1b307f3","blobs/sha256/135f786ad04647c6e
58d9a2d4f6f87bd677ef6144ab24c81a6f5be7acc63fbc9","blobs/sha256/ad2f08e39a9de1e121
57c800bd31ba86f8cc222eedec11e8e072c3ba608d26fb","blobs/sha256/d98dcc720ae098efb91
563f0a9abe03de50b403f7aa6c6f0e1dfb8297aedb61f","blobs/sha256/aa82c57cd9fe730130e3
5d42c6b26a4a9d3c858f61c23f63d53b703abf30adf8","blobs/sha256/d26dc06ef910f67b1b2bc
bcc6318e2e08881011abc7ad40fd859f38641ab105c","blobs/sha256/03d9365bc5dc9ec8b2f032
927d3d3ae10b840252c86cf245a63b713d50eaa2fd"],"LayerSources":{"sha256:03d9365bc5dc
9ec8b2f032927d3d3ae10b840252c86cf245a63b713d50eaa2fd":{"mediaType":"application/vn
d.oci.image.layer.v1.tar","size":7168,"digest":"sha256:03d9365bc5dc9ec8b2f032927d3
d3ae10b840252c86cf245a63b713d50eaa2fd"},"sha256:1287fbecdfcce6ee8cf2436e5b9e9d86a
4648db2d91080377d499737f1b307f3":{"mediaType":"application/vnd.oci.image.layer.v
1.tar","size":77844480,"digest":"sha256:1287fbecdfcce6ee8cf2436e5b9e9d86a4648db2d
91080377d499737f1b307f3"},"sha256:135f786ad04647c6e58d9a2d4f6f87bd677ef6144ab24c8
1a6f5be7acc63fbc9":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":118268416,"digest":"sha256:135f786ad04647c6e58d9a2d4f6f87bd677ef6144ab24c81a6f5be7acc63fbc9"},"sha256:aa82c57cd9fe730130e35d42c6b26a4a9d3c858f61c23f63d53b703abf30adf8":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":2560,"digest":"sha256:aa82c57cd9fe730130e35d42c6b26a4a9d3c858f61c23f63d53b703abf30adf8"},"sha256:ad2f08e39a9de1e12157c800bd31ba86f8cc222eedec11e8e072c3ba608d26fb":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":3584,"digest":"sha256:ad2f08e39a9de1e12157c800bd31ba86f8cc222eedec11e8e072c3ba608d26fb"},"sha256:d26dc06ef910f67b1b2bcbcc6318e2e08881011abc7ad40fd859f38641ab105c":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":5120,"digest":"sha256:d26dc06ef910f67b1b2bcbcc6318e2e08881011abc7ad40fd859f38641ab105c"},"sha256:d98dcc720ae098efb91563f0a9abe03de50b403f7aa6c6f0e1dfb8297aedb61f":{"mediaType":"application/vnd.oci.image.layer.v1.tar","size":4608,"digest":"sha256:d98dcc720ae098efb91563f0a9abe03de50b403f7aa6c6f0e1dfb8297aedb61f"}}}]

[root@ubuntu2404 ~]# du -sh /data/*
188M	/data/blobs
4.0K	/data/index.json
4.0K	/data/manifest.json
4.0K	/data/oci-layout
4.0K	/data/repositories

搜索镜像

官方网站进行镜像的搜索

官网


http://hub.docker.com
http://dockerhub.com
https://hub-stage.docker.com/

在官方的docker 仓库中搜索指定名称的docker镜像,也会有很多三方镜像

执行docker search命令进行搜索

格式如下


Usage:  docker search [OPTIONS] TERM

Options:-f, --filter filter   Filter output based on conditions provided
            --format string   Pretty-print search using a Go template
            --limit int       Max number of search results (default 25)
            --no-trunc				Don't truncate output
        
说明:  
OFFICIAL:  官方
AUTOMATED:  使用第三方docker服务来帮助编译镜像,可以在互联网上面直接拉取到镜像,减少了繁琐的编译过程

示例


[root@ubuntu2404 ~]#docker search centos
#搜索点赞100个以上的镜像
#旧语法
[root@ubuntu2404 ~]#docker search -s 100  centos
#新语法
[root@ubuntu2404 ~]#docker  search --filter=stars=100 centos

alpine 介绍

深入解析Docker镜像分层原理
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。
Alpine 由非商业组织维护的,支持广泛场景的 Linux发行版,它特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。
目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
下表是官方镜像的大小比较


REPOSITORY    TAG           IMAGE ID       CREATED        SIZE
alpine        latest        aded1e1a5b37   4 weeks ago    7.83MB
nginx         latest        53a18edff809   5 weeks ago    192MB
nginx         1.27.4-perl   c59bf4259aec   5 weeks ago    240MB
hello-world   latest        74cc54e27dc4   7 weeks ago    10.1kB
busybox       1.37-uclibc   298c155189b9   5 months ago   1.23MB

Alpine 官网:https://www.alpinelinux.org/
Alpine 官方仓库:https://github.com/alpinelinux
Alpine 官方镜像:https://hub.docker.com/_/alpine/
Alpine 官方镜像仓库:https://github.com/gliderlabs/docker-alpine
Alpine 阿里云的镜像仓库:https://mirrors.aliyun.com/alpine/
alpine管理软件


/ # cat /etc/apk/repositories 
https://dl-cdn.alpinelinux.org/alpine/v3.15/main
https://dl-cdn.alpinelinux.org/alpine/v3.15/community
 
[root@ubuntu2204 ~]#sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/' /etc/apk/repositories
#修改源替换成阿里源,将里面 dl-cdn.alpinelinux.org 的 改成 mirrors.aliyun.com
vi /etc/apk/repositories
https://mirrors.ustc.edu.cn/alpine/v3.16/main
https://mirrors.ustc.edu.cn/alpine/v3.16/community

http://mirrors.aliyun.com/alpine/v3.8/main/
http://mirrors.aliyun.com/alpine/v3.8/community/

[root@ubuntu2204 ~]#sed -i 's/mirrors.aliyun.com/mirrors.ustc.edu.cn/' repositories 
[root@ubuntu2204 ~]#docker cp repositories  alpine-image-3.16.2:/etc/apk/repositories

#更新源
apk update 

#安装软件
apk add vim

#删除软件
apk del openssh openntp vim

#安装常见软件
apk update && apk --no-cache add bash curl telnet  wget net-tools pstree  zip unzip 

#安装常用编译工具
apk update && apk --no-cache add gcc make curl zip unzip net-tools pstree wget 
libgcc libc-dev libcurl libc-utils pcre-dev zlib-dev  libnfs  pcre pcre2 libevent 
libevent-dev iproute2 

#修改时区
apk update && apk --no-cache add tzdata  && ln -s  
/usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

Debian(ubuntu)系统建议安装的基础包

在很多软件官方提供的镜像都使用的是Debian(ubuntu)的系统,比如:nginx,tomcat,mysql,httpd 等,但镜像内缺少很多常用的调试工具。当需要进入容器内进行调试管理时,可以安装以下常用工具包。


# apt update           #安装软件前需要先更新索引     
# apt install procps   #提供top,ps,free等命令  
# apt install psmisc   #提供pstree,killall等命令
# apt install iputils-ping  #提供ping命令
# apt install net-tools     #提供netstat网络工具等

下载镜像

从 docker 仓库将镜像下载到本地,命令格式如下


docker pull [OPTIONS] NAME[:TAG|@DIGEST]
 Options:
 -a, --all-tags              Download all tagged images in the repository
     --disable-content-trust Skip image verification (default true)
     --platform string       Set platform if server is multi-platform capable
-q, --quiet									 Suppress verbose output

NAME: 是镜像名,一般的形式  仓库服务器:端口/项目名称/镜像名称
:TAG: 即版本号,如果不指定:TAG,则下载最新版镜像

镜像下载说明


[root@ubuntu2404 ~]# docker pull httpd
Using default tag: latest             #默认下载最新版本
latest: Pulling from library/httpd
6e909acdb790: Already exists  
9f9b03a66afb: Pull complete           #分层下载
4f4fb700ef54: Pull complete 
09bf08b13dbd: Pull complete 
084c58879b9a: Pull complete 
c61868f0ad74: Pull complete 
Digest: sha256:24a9d0ccd0b477fb9765b4380164359efedce1b0bfd466e4dc6a9b139e468b57 #摘要
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest        #下载的完整地址

镜像下载保存的路径


/var/lib/docker/overlay2/镜像ID

注意:镜像下载完成后,会自动解压缩,比官网显示的可能会大很多,如:centos8下载时只有70MB,下载完后显示237MB。
下载镜像 alpine,busybox等镜像,查看下载的存放目录


[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG           IMAGE ID       CREATED        SIZE
alpine        latest        aded1e1a5b37   4 weeks ago    7.83MB
nginx         latest        53a18edff809   5 weeks ago    192MB
nginx         1.27.4-perl   c59bf4259aec   5 weeks ago    240MB
httpd         latest        83d938198316   7 weeks ago    148MB
hello-world   latest        74cc54e27dc4   7 weeks ago    10.1kB
busybox       1.37-uclibc   298c155189b9   5 months ago   1.23MB
[root@ubuntu2404 ~]# ls /var/lib/docker/overlay2/
02d4f0ca191bf1afdf9dfd7f9f5da93aef978287663efc7b335818b53ce331bc
04d5000912d5fb75825407675fd23e1a738b8c9435c4ab2f1e3f4fe40156336b
0b7baecc37940f29b2d313dc74c767ec6f2d8583d2e5066327dd0094fc3fe65d
15352130b3117c65d00cbbced4fba65243ff02a38d4d2ea268db83b1bc13632a
289ed7097754a52e59ee80a44d296793fe62c373414c805ef30210b33f60b81f
2cc09aeeefdbada2e9df03a3fadf52480e635eba3864601aa6b0bde4be5f936c
3412b6c64fb7020fadff0f2baa7dd2bacb27b4b28bd976fe2bce37b81794fe94
37fae3ff500adb63378552a0d79a78b8fd6a79f33fbfaa7c59b280e2e8b0e6ca
4ac82b0a17fb6089e51cf0b2bfca24274a673657f6e421ed80cc2bbb1102a3f2
4ac82b0a17fb6089e51cf0b2bfca24274a673657f6e421ed80cc2bbb1102a3f2-init
4dc9118100718f98078ae3d36f10d4bb8706331f600b1af0d3b3b7650e392bc6
4e9661af3ae9bdb4aee0ea373748544cc2c8c9359d02814d30555201c189733f
86742b703bc2747f874f27a2ab16715d8bf9a1169bb7519f9b1047cd35463fc3
89488af8efefe363c5947fa8963cc3e04052d494383774a4830f5e98e6a09a41
97bbdaa9d3dc6aaedecc78e04dfbb90cf30087f0ea3ce2a7f8861f9a03e04b01
a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9
ab01099858303cb9b33d87175d56162fe47756d20632c2cba09c81d03177f054
ab858d4a34dea391a9930f3402cd9a9f648dc5bb6f62092a03169889fb2cdcd5
l
[root@ubuntu2404 ~]# du -sh /var/lib/docker/overlay2/
332M	/var/lib/docker/overlay2/
[root@ubuntu2404 ~]# du -sh /var/lib/docker/overlay2/*
62M	/var/lib/docker/overlay2/02d4f0ca191bf1afdf9dfd7f9f5da93aef978287663efc7b335818b53ce331bc
82M	/var/lib/docker/overlay2/04d5000912d5fb75825407675fd23e1a738b8c9435c4ab2f1e3f4fe40156336b
24K	/var/lib/docker/overlay2/0b7baecc37940f29b2d313dc74c767ec6f2d8583d2e5066327dd0094fc3fe65d
24K	/var/lib/docker/overlay2/15352130b3117c65d00cbbced4fba65243ff02a38d4d2ea268db83b1bc13632a
8.2M	/var/lib/docker/overlay2/289ed7097754a52e59ee80a44d296793fe62c373414c805ef30210b33f60b81f
36K	/var/lib/docker/overlay2/2cc09aeeefdbada2e9df03a3fadf52480e635eba3864601aa6b0bde4be5f936c
32K	/var/lib/docker/overlay2/3412b6c64fb7020fadff0f2baa7dd2bacb27b4b28bd976fe2bce37b81794fe94
28K	/var/lib/docker/overlay2/37fae3ff500adb63378552a0d79a78b8fd6a79f33fbfaa7c59b280e2e8b0e6ca
32K	/var/lib/docker/overlay2/4ac82b0a17fb6089e51cf0b2bfca24274a673657f6e421ed80cc2bbb1102a3f2
40K	/var/lib/docker/overlay2/4ac82b0a17fb6089e51cf0b2bfca24274a673657f6e421ed80cc2bbb1102a3f2-init
116M	/var/lib/docker/overlay2/4dc9118100718f98078ae3d36f10d4bb8706331f600b1af0d3b3b7650e392bc6
20K	/var/lib/docker/overlay2/4e9661af3ae9bdb4aee0ea373748544cc2c8c9359d02814d30555201c189733f
28K	/var/lib/docker/overlay2/86742b703bc2747f874f27a2ab16715d8bf9a1169bb7519f9b1047cd35463fc3
12M	/var/lib/docker/overlay2/89488af8efefe363c5947fa8963cc3e04052d494383774a4830f5e98e6a09a41
28K	/var/lib/docker/overlay2/97bbdaa9d3dc6aaedecc78e04dfbb90cf30087f0ea3ce2a7f8861f9a03e04b01
36K	/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9
1.3M	/var/lib/docker/overlay2/ab01099858303cb9b33d87175d56162fe47756d20632c2cba09c81d03177f054
52M	/var/lib/docker/overlay2/ab858d4a34dea391a9930f3402cd9a9f648dc5bb6f62092a03169889fb2cdcd5
76K	/var/lib/docker/overlay2/l
[root@ubuntu2404 ~]# ls /var/lib/docker/overlay2/l -l
total 72
lrwxrwxrwx 1 root root 72 Mar 18 05:10 4OCVFXZ2AL5X3EZKIZLGGYL5KB -> ../ab858d4a34dea391a9930f3402cd9a9f648dc5bb6f62092a03169889fb2cdcd5/diff
lrwxrwxrwx 1 root root 72 Mar 18 05:01 EDAABNHRGBDXDMTI4OEZCTQ4FI -> ../a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/diff
lrwxrwxrwx 1 root root 72 Mar 18 05:01 GY72MNJ33VKZHW2MWHY53GHJBI -> ../97bbdaa9d3dc6aaedecc78e04dfbb90cf30087f0ea3ce2a7f8861f9a03e04b01/diff
lrwxrwxrwx 1 root root 72 Mar 16 12:20 I657O2PSRQKP53OZ3PUYIADVJD -> ../15352130b3117c65d00cbbced4fba65243ff02a38d4d2ea268db83b1bc13632a/diff
lrwxrwxrwx 1 root root 72 Mar 18 05:01 KZP26LI2SBPJRAUO6BI4QUBB5V -> ../0b7baecc37940f29b2d313dc74c767ec6f2d8583d2e5066327dd0094fc3fe65d/diff
lrwxrwxrwx 1 root root 72 Mar 18 11:31 L3AP4O6X6BLK7C3A6GMEIF3NL5 -> ../3412b6c64fb7020fadff0f2baa7dd2bacb27b4b28bd976fe2bce37b81794fe94/diff

镜像加速配置和优化

docker 镜像官方的下载站点是:https://hub.docker.com/
从国内下载官方的镜像站点有时候会很慢,因此可以更改docker配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的。国内有许多公司都提供了docker 加速镜像,比如:阿里云,腾讯云,网易云,以下以阿里云为例。
浏览器打开 http://cr.console.aliyun.com,注册或登录阿里云账号,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明。

Docker 镜像加速配置


1. 安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce
2. 配置镜像加速器
修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
 {
 "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub
  mirror.c.163.com/","https://si7y70hh.mirror.aliyuncs.com"],
 "live-restore": true, #docker服务重启,不会重启容器,
 "graph": "/data/docker",  #指定docker数据目录
"insecure-registries": ["harbor.caoge.org"]
 }
 EOF
 #网易云:  http://hub-mirror.c.163.com/
 #中科大:  https://docker.mirrors.ustc.edu.cn
 #腾讯云:  https://mirror.ccs.tencentyun.com
 #七牛云:  https://reg-mirror.qiniu.com
 
 systemctl daemon-reload
 systemctl restart docker

利用阿里云实现镜像加速


[root@ubuntu2404 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://g5c737m4.mirror.aliyuncs.com","https://docker.1ms.run",
        "https://docker.xuanyuan.me"]
}
[root@rocky9 ~]# cat /etc/docker/daemon.json 
{
	"registry-mirrors": [
	"https://g5c737m4.mirror.aliyuncs.com",
	"https://docker.m.daocloud.io",
  "https://huecker.io",
  "https://dockerhub.timeweb.cloud",
  "https://noohub.ru",
	"https://docker-0.unsee.tech",
	"https://docker.1panel.live",
	"https://registry.dockermirror.com",
	"https://docker.imgdb.de",
	"https://registry.docker-cn.com",
	"https://docker.1panel.live",
	"https://hub.rat.dev"
]
}
[root@ubuntu2404 ~]# systemctl daemon-reload
[root@ubuntu2404 ~]# systemctl restart docker

镜像加速器


[root@ubuntu2404 ~]# vim /etc/docker/daemon.json
 {
 "registry-mirrors" : [
 "http://registry.docker-cn.com",
 "http://docker.mirrors.ustc.edu.cn",
 "http://hub-mirror.c.163.com"
  ],
 "insecure-registries" : [
 "registry.docker-cn.com",
 "docker.mirrors.ustc.edu.cn"
  ],
 "debug" : true,
 "experimental" : true
 }

查看本地镜像

docker images 可以查看下载至本地的镜像


https://docs.docker.com/engine/reference/commandline/images/

格式


[root@ubuntu2404 ~]# docker images --help
Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Aliases:
  docker image ls, docker image list, docker images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about formatting output with templates
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs
      --tree            List multi-platform images as a tree (EXPERIMENTAL)

执行结果的显示信息说明


REPOSITORY      #镜像所属的仓库名称
TAG             #镜像版本号(标识符),默认为latest
IMAGE ID        #镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED         #镜像在仓库中被创建时间
VIRTUAL SIZE    #镜像的大小

docker images –format命令用于指定在输出中显示映像信息的格式。格式字符串由多个占位符组成, 每个占位符代表映像的特定属性。


#常用的格式占位符:
{{.Repository}}:映像的仓库名称。
{{.Tag}}:映像的标签。
{{.ID}}:映像的ID。
{{.Digest}}:映像的摘要值。
{{.CreatedAt}}:映像的创建时间。
{{.Size}}:映像的大小

#示例
docker images --format "{{.Repository}}	{{.Tag}}	{{.Size}}"
docker images --format "{{.CreatedAt}}	{{.Repository}}:{{.Tag}}" | sort -k 1 -r

Repository仓库

由某特定的docker镜像的所有迭代版本组成的镜像仓库一个Registry中可以存在多个RepositoryRepository可分为“顶层仓库”和“用户仓库”Repository用户仓库名称一般格式为“用户名/仓库名”每个Repository仓库可以包含多个Tag(标签),每个标签对应一个镜像

示例


[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG           IMAGE ID       CREATED        SIZE
alpine        latest        aded1e1a5b37   4 weeks ago    7.83MB
nginx         1.27.4-perl   c59bf4259aec   5 weeks ago    240MB
nginx         latest        53a18edff809   5 weeks ago    192MB
httpd         latest        83d938198316   7 weeks ago    148MB
hello-world   latest        74cc54e27dc4   8 weeks ago    10.1kB
busybox       1.37-uclibc   298c155189b9   5 months ago   1.23MB
[root@ubuntu2404 ~]# docker images -q
aded1e1a5b37
53a18edff809
c59bf4259aec
83d938198316
74cc54e27dc4
298c155189b9
#显示完整的ImageID
[root@ubuntu2404 ~]# docker images --no-trunc 
REPOSITORY    TAG           IMAGE ID                                                                  CREATED        SIZE
alpine        latest        sha256:aded1e1a5b3705116fa0a92ba074a5e0b0031647d9c315983ccba2ee5428ec8b   4 weeks ago    7.83MB
nginx         latest        sha256:53a18edff8091d5faff1e42b4d885bc5f0f897873b0b8f0ace236cd5930819b0   5 weeks ago    192MB
nginx         1.27.4-perl   sha256:c59bf4259aecb7739911dc609e1da2254458a122e98555413cb0df973a546cad   5 weeks ago    240MB
httpd         latest        sha256:83d938198316505b3aebd52bed1e54e5f2a49591cc41e09a30f480e5c00ea0cf   7 weeks ago    148MB
hello-world   latest        sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602   8 weeks ago    10.1kB
busybox       1.37-uclibc   sha256:298c155189b9dc0e18a91d5f238a9248f73b920c821be147fd782d53135d57f5   5 months ago   1.23MB
#只查看指定REPOSITORY的镜像
[root@ubuntu2404 ~]# docker images busybox
REPOSITORY   TAG           IMAGE ID       CREATED        SIZE
busybox      1.37-uclibc   298c155189b9   5 months ago   1.23MB
#只查看镜像的REPOSITORY和TAG
[root@ubuntu2404 ~]# docker image ls --format "{{.Repository}}:{{.Tag}}"
alpine:latest
nginx:latest
nginx:1.27.4-perl
httpd:latest
hello-world:latest
busybox:1.37-uclibc

查看dangling状态的镜像 ,dangling images表示TAG为的镜像


[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
alpine       latest    9ed4aefc74f6   3 weeks ago     7.05MB
<none>       <none>    0584b370e957   11 months ago   141MB
[root@ubuntu2404 ~]# docker images  -f dangling=true
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    0584b370e957   11 months ago   141MB

查看指定镜像的详细信息


[root@ubuntu2404 ~]# docker inspect nginx:latest
[
    {
        "Id": "sha256:53a18edff8091d5faff1e42b4d885bc5f0f897873b0b8f0ace236cd5930819b0",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:706959c57d76560ed77ea37b7e0a203388b5b12c153c4f820449b9d43d292f53"
        ],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2025-02-05T21:27:16Z",
        "DockerVersion": "",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.27.4",
                "NJS_VERSION=0.8.9",
                "NJS_RELEASE=1~bookworm",
                "PKG_RELEASE=1~bookworm",
                "DYNPKG_RELEASE=1~bookworm"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 192004242,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/97bbdaa9d3dc6aaedecc78e04dfbb90cf30087f0ea3ce2a7f8861f9a03e04b01/diff:/var/lib/docker/overlay2/86742b703bc2747f874f27a2ab16715d8bf9a1169bb7519f9b1047cd35463fc3/diff:/var/lib/docker/overlay2/37fae3ff500adb63378552a0d79a78b8fd6a79f33fbfaa7c59b280e2e8b0e6ca/diff:/var/lib/docker/overlay2/0b7baecc37940f29b2d313dc74c767ec6f2d8583d2e5066327dd0094fc3fe65d/diff:/var/lib/docker/overlay2/4dc9118100718f98078ae3d36f10d4bb8706331f600b1af0d3b3b7650e392bc6/diff:/var/lib/docker/overlay2/04d5000912d5fb75825407675fd23e1a738b8c9435c4ab2f1e3f4fe40156336b/diff",
                "MergedDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/merged",
                "UpperDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/diff",
                "WorkDir": "/var/lib/docker/overlay2/a315208ee0004bc76ea466f22706b36141ef2f05852d10d2a991c20327a68cb9/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:1287fbecdfcce6ee8cf2436e5b9e9d86a4648db2d91080377d499737f1b307f3",
                "sha256:135f786ad04647c6e58d9a2d4f6f87bd677ef6144ab24c81a6f5be7acc63fbc9",
                "sha256:ad2f08e39a9de1e12157c800bd31ba86f8cc222eedec11e8e072c3ba608d26fb",
                "sha256:d98dcc720ae098efb91563f0a9abe03de50b403f7aa6c6f0e1dfb8297aedb61f",
                "sha256:aa82c57cd9fe730130e35d42c6b26a4a9d3c858f61c23f63d53b703abf30adf8",
                "sha256:d26dc06ef910f67b1b2bcbcc6318e2e08881011abc7ad40fd859f38641ab105c",
                "sha256:03d9365bc5dc9ec8b2f032927d3d3ae10b840252c86cf245a63b713d50eaa2fd"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

镜像导出

利用docker save命令可以将从本地镜像导出为一个打包 tar文件,然后复制到其他服务器进行导入使用。
注意:镜像导出支持多个镜像导出。
格式


Usage:  docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Aliases:
  docker image save, docker save

Options:
  -o, --output string     Write to a file, instead of STDOUT
      --platform string   Save only the given platform variant. Formatted as "os[/arch[/variant]]" (e.g., "linux/amd64")

#说明:
Docker save 使用IMAGE ID导出,在导入后的镜像没有REPOSITORY和TAG,显示为<none>

常见用法


#导出为tar格式
docker save -o /path/file.tar IMAGE1 IMAGE2 ...
docker save IMAGE1 IMAGE2 ... > /path/file.tar
#导出为压缩格式
docker save IMAGE1 IMAGE2 ... | gzip > /path/file.tar.gz

导出指定镜像


[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG           IMAGE ID       CREATED        SIZE
alpine        latest        aded1e1a5b37   4 weeks ago    7.83MB
nginx         latest        53a18edff809   5 weeks ago    192MB
nginx         1.27.4-perl   c59bf4259aec   5 weeks ago    240MB
httpd         latest        83d938198316   7 weeks ago    148MB
hello-world   latest        74cc54e27dc4   8 weeks ago    10.1kB
busybox       1.37-uclibc   298c155189b9   5 months ago   1.23MB
[root@ubuntu2404 ~]# docker save httpd:latest -o /data/httpd-images.tar
[root@ubuntu2404 ~]# scp /data/httpd-images.tar 192.168.7:/data

导出镜像并压缩


[root@ubuntu2404 ~]# docker save busybox:1.37-uclibc |gzip - > busybox.tar 
[root@ubuntu2404 ~]# ll busybox.tar -h
-rw-r--r-- 1 root root 741K Mar 20 02:50 busybox.tar

导出所有镜像到不同文件中


[root@ubuntu2404 ~]# docker images | awk 'NR!=1{print $1,$2}' | while read repo tag ;do docker save  $repo:$tag -o /opt/$repo-$tag.tar ;done

导出所有镜像到一个打包文件中


#方法1: 使用image ID导出镜像,在导入后的镜像没有REPOSITORY和TAG,显示为<none>
[root@ubuntu2404 ~]# docker save `docker images -qa` -o all.tar

#方法2:将所有镜像导入到一个文件中,此方法导入后可以看REPOSITORY和TAG
[root@ubuntu2404 ~]# docker save `docker images |awk 'NR!=1{print $1":"$2}'` -o all.tar

#方法3:将所有镜像导入到一个文件中,此方法导入后可以看REPOSITORY和TAG
[root@ubuntu2404 ~]# docker image save `docker image ls --format "{{.Repository}}:{{.Tag}}"` -o all.tar

镜像导入

利用docker load命令可以将镜像导出的打包或压缩文件再导入。
注意:镜像导入只能支持单个镜像导入,不支持多个镜像导入。
格式


Usage:  docker load [OPTIONS]

Load an image from a tar archive or STDIN

Aliases:
  docker image load, docker load

Options:
  -i, --input string      Read from tar archive file, instead of STDIN
      --platform string   Load only the given platform variant. Formatted as "os[/arch[/variant]]" (e.g., "linux/amd64")
  -q, --quiet             Suppress the load output

常见用法


docker load -i /path/file.tar
docker load < /path/file.tar.gz

镜像导入


root@ubuntu2404:# docker save centos:centos7.7.1908 -o centos.tar
root@ubuntu2404:# scp centos.tar 192.168.1.7:
The authenticity of host '192.168.1.7 (192.168.1.7)' can't be established.
ED25519 key fingerprint is SHA256:WO9vsonyS9+IW4eQRU6VggXHay8zzVycjy2wxzLhEdk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.7' (ED25519) to the list of known hosts.
root@192.168.1.7's password: 
centos.tar                                                                                                     100%  202MB 119.9MB/s   00:01    

[root@rocky9 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
alpine        latest    aded1e1a5b37   4 weeks ago     7.83MB
ubuntu        latest    b1d9df8ab815   4 months ago    78.1MB
busybox       latest    31311c5853a2   5 months ago    4.27MB
hello-world   latest    d2c94e258dcb   22 months ago   13.3kB
centos        latest    5d0da3dc9764   3 years ago     231MB
tomcat        8.5.49    6408fdc94212   5 years ago     507MB
[root@rocky9 ~]# docker load <centos.tar 
034f282942cd: Loading layer [==================================================>]  211.8MB/211.8MB
Loaded image: centos:centos7.7.1908
[root@rocky9 ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED         SIZE
alpine        latest           aded1e1a5b37   4 weeks ago     7.83MB
ubuntu        latest           b1d9df8ab815   4 months ago    78.1MB
busybox       latest           31311c5853a2   5 months ago    4.27MB
hello-world   latest           d2c94e258dcb   22 months ago   13.3kB
centos        latest           5d0da3dc9764   3 years ago     231MB
tomcat        8.5.49           6408fdc94212   5 years ago     507MB
centos        centos7.7.1908   08d05d1d5859   5 years ago     204MB

删除镜像

docker rmi 命令可以删除本地镜像
格式


Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

Aliases:
  docker image rm, docker image remove, docker rmi

Options:
  -f, --force      Force removal of the image
      --no-prune   Do not delete untagged parents

[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED        SIZE
alpine       latest           aded1e1a5b37   5 weeks ago    7.83MB
nginx        latest           53a18edff809   6 weeks ago    192MB
httpd        latest           83d938198316   8 weeks ago    148MB
busybox      1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos       centos7.7.1908   08d05d1d5859   5 years ago    204MB
[root@ubuntu2404 ~]# docker rmi alpine:latest 
Untagged: alpine:latest
Untagged: alpine@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Deleted: sha256:aded1e1a5b3705116fa0a92ba074a5e0b0031647d9c315983ccba2ee5428ec8b
Deleted: sha256:08000c18d16dadf9553d747a58cf44023423a9ab010aab96cf263d2216b8b350
[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED        SIZE
nginx        latest           53a18edff809   6 weeks ago    192MB
httpd        latest           83d938198316   8 weeks ago    148MB
busybox      1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos       centos7.7.1908   08d05d1d5859   5 years ago    204MB
[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED        SIZE
nginx        latest           53a18edff809   6 weeks ago    192MB
httpd        latest           83d938198316   8 weeks ago    148MB
busybox      1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos       centos7.7.1908   08d05d1d5859   5 years ago    204MB
[root@ubuntu2404 ~]# docker rmi -f httpd:latest 
Untagged: httpd:latest
Untagged: httpd@sha256:24a9d0ccd0b477fb9765b4380164359efedce1b0bfd466e4dc6a9b139e468b57
Deleted: sha256:83d938198316505b3aebd52bed1e54e5f2a49591cc41e09a30f480e5c00ea0cf
Deleted: sha256:6bdbb0a2198f08db2f80c3db1f094d4cb8b1e482aef24c10a2e61d93e11e51b5
Deleted: sha256:ffaf910957d87e83b14974375a2d47352d2f337e87cf462c6f09a8f89d65ecb6
Deleted: sha256:613aebef752bff75a390f2a2c68bbc6264cfd2ae8b6dd8206087766dfa64407b
Deleted: sha256:e128c45fa3020cd068c8e32bd7b84f5598eb9706c06c330c52f4e32c6b7e6ed0
Deleted: sha256:c0e7ceb8e5c0ed32d42a60bb5b9fc68ac182a0b78922e510713eb897c06187ac
[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED        SIZE
nginx        latest           53a18edff809   6 weeks ago    192MB
busybox      1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos       centos7.7.1908   08d05d1d5859   5 years ago    204MB

#删除多个镜像
[root@ubuntu2404 ~]# docker rmi -f httpd:latest nginx:latest
#删除所有镜像
[root@ubuntu2404 ~]# docker rmi `docker images -q`

示例:旧版本强制删除正在使用的镜像,也会删除对应的容器,新版本不允许删除正在运行的容器对应的镜像。


[root@ubuntu2404 ~]# docker ps -a
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS                   PORTS     NAMES
636247535f7a   nginx:latest            "/docker-entrypoint.…"   9 seconds ago   Up 8 seconds             80/tcp    test
29cfd7d54a70   centos:centos7.7.1908   "sh"                     4 hours ago     Exited (1) 4 hours ago             centos
[root@ubuntu2404 ~]# docker rmi centos:centos7.7.1908 
Error response from daemon: conflict: unable to remove repository reference "centos:centos7.7.1908" (must force) - container 29cfd7d54a70 is using its referenced image 08d05d1d5859
[root@ubuntu2404 ~]# docker rmi -f centos:centos7.7.1908 
Untagged: centos:centos7.7.1908
Untagged: centos@sha256:50752af5182c6cd5518e3e91d48f7ff0cba93d5d760a67ac140e2d63c4dd9efc
Deleted: sha256:08d05d1d5859ebcfb3312d246e2082e46cb307f0e896c9ac097185f0b0b19e56
[root@ubuntu2404 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                   PORTS     NAMES
636247535f7a   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute        80/tcp    test
29cfd7d54a70   08d05d1d5859   "sh"                     4 hours ago          Exited (1) 4 hours ago             centos
#新版docker不能删除正在使用的镜像
[root@ubuntu2404 ~]# docker rmi -f 636247535f7a
Error response from daemon: No such image: 636247535f7a:latest
[root@ubuntu2404 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                   PORTS     NAMES
636247535f7a   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes             80/tcp    test
29cfd7d54a70   08d05d1d5859   "sh"                     4 hours ago     Exited (1) 4 hours ago             centos
#如果容器停止,则可以删除镜像,但只是逻辑删除,即删除了镜像名称无法再使用,但实际不会释放镜像的空间

清理dangling状态的镜像

dangling images表示TAG为的镜像
删除dangling状态的镜像


#dangling images表示TAG为<none>的镜像
[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
centos-base   1.0              09c794abd63c   10 hours ago   804MB
<none>        <none>           9a94ca135099   10 hours ago   739MB
alpine        latest           aded1e1a5b37   5 weeks ago    7.83MB
nginx         1.26             53a18edff809   6 weeks ago    192MB
ubuntu        24.04            a04dc4851cbc   7 weeks ago    78.1MB
busybox       1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos        7                eeb6ee3f44bd   3 years ago    204MB
centos        centos7.7.1908   08d05d1d5859   5 years ago    204MB
[root@ubuntu2404 ~]# docker images -q -f dangling=true
9a94ca135099
[root@ubuntu2404 ~]# docker rmi -f `docker images -q -f dangling=true`
Deleted: sha256:9a94ca135099a608181f7c998f6f94c8c9df3f5576a500ae0e26c679c747b60d
[root@ubuntu2404 ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
centos-base   1.0              09c794abd63c   10 hours ago   804MB
alpine        latest           aded1e1a5b37   5 weeks ago    7.83MB
nginx         1.26             53a18edff809   6 weeks ago    192MB
ubuntu        24.04            a04dc4851cbc   7 weeks ago    78.1MB
busybox       1.37-uclibc      298c155189b9   5 months ago   1.23MB
centos        7                eeb6ee3f44bd   3 years ago    204MB
centos        centos7.7.1908   08d05d1d5859   5 years ago    204MB

#清除dangling和不再使用的镜像
[root@ubuntu2404 ~]# docker image prune -a -f

镜像打标签

docker tag 可以给镜像打标签,类似于起别名,但通常要遵守一定的命名规范,才可以上传到指定的仓库。
格式


Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Aliases:
  docker image tag, docker tag

#仓库主机FQDN或IP[:端口]/项目名(或用户名)/image名字:版本
#TAG默认为latest

示例


[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG           IMAGE ID       CREATED        SIZE
alpine       latest        aded1e1a5b37   5 weeks ago    7.83MB
nginx        latest        53a18edff809   6 weeks ago    192MB
busybox      1.37-uclibc   298c155189b9   5 months ago   1.23MB
[root@ubuntu2404 ~]# docker tag nginx:latest nginx:1.26
[root@ubuntu2404 ~]# docker images
REPOSITORY   TAG           IMAGE ID       CREATED        SIZE
alpine       latest        aded1e1a5b37   5 weeks ago    7.83MB
nginx        1.26          53a18edff809   6 weeks ago    192MB
nginx        latest        53a18edff809   6 weeks ago    192MB
busybox      1.37-uclibc   298c155189b9   5 months ago   1.23MB

总结:企业使用镜像及常见操作:搜索、下载、导出、导入、删除
命令总结


docker search centos  #搜索镜像
docker pull alpine		#拉取镜像
docker images					
docker save > /opt/centos.tar   #centos #导出镜像
docker load -i /opt/centos.tar  #导入本地镜像
docker rmi 镜像ID/镜像名称      #删除指定ID的镜像,此镜像对应容器正启动镜像不能被删除,除非将容器全部关闭
© 版权声明

相关文章

暂无评论

none
暂无评论...