计算机网络/计算机科学与应用/系统/运维/开发

第四章、获取镜像/查看镜像信息

一、获取镜像

语法:

       docker [image] pull 镜像名 

格式:

docker [image] pull NAME[:TAG]

NAME 表示镜像仓库名称(用来区分镜像) 

TAG 表示镜像的标签(一般表示版本信息)

如果不显示指定TAG 则默认会选择latest标签 最新版


实例:下载一个最新的Ubuntu操作系统镜像

$ docker pull ubuntu:18.04

注意:如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像


二、查看镜像信息

2.1、使用images命令列出镜像


语法:

        docker images 或者 docker image ls 


选项:

-a,--all=true|false : 列出所有镜像文件,默认否

--digests=true|false: 列出镜像的数字摘要值 默认为否

-f,--filter=[]: 过滤列出的镜像,如dangling=true只显示没有被使用的镜像,也可以指定带有特定标注的镜像

--format="TEMPLATE" 控制输出格式, .ID代表ID信息,.Repository代表仓库信息

--no-trunc=true|false: 对输出结果中太长的部分是否进行截断,如镜像的id信息,默认是

-q,--quiet=true|false :仅输出id信息,默认为否

docker images --digests=true

来自哪个仓库/镜像的标签信息/镜像的id/创建时间/镜像大小


同等效果命令:

# docker image list
# docker image list
# docker image ls


2.2、使用tag命令添加镜像标签


语法:

    docker tag 镜像名:标签名  自定义镜像名:标签名


案例:添加一个新的myubuntu18.4标签

docker tag ubuntu:latest myubuntu:latest


2.3、inspect命令查看详细信息

格式:

    docker [image] inspect 镜像名


案例:查看ubuntu镜像的详细信息

docker [image] inspect ubuntu

查看某一项内容,使用-f指定:

docker [image] inspect -f {{".Architecture"}}  镜像名 


2.4、history命令查看镜像历史


格式:

    docker history 镜像名 


实例,查看ubuntu镜像的历史信息

docker history ubuntu:latest


四、下载指定版本的镜像

[root@localhost docker]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
7c457f213c76: Pull complete 
Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04


严格讲,镜像的仓库名称中还应该添加仓库地址,(注册服务器registry)上面2条命令实际执行了:

$ sudo docker pull registry.hub.docker.com/ubuntu:latest  
从默认的注册服务器registry.hub.docker.com中的ubuntu仓库下载标记标为latest的镜像


除从默认的仓库中下载之外,也可以从其他注册服务器的仓库下载

需要指定完整的仓库注册服务器地址


实例:从DockerPool社区的镜像源dl.dockerpool.com下载最新的Ubuntu镜像

$ sudo docker pull dl.dockerpoll.com:5000/ubuntu


pull 子命令支持的选项主要包括:

-a,--all-tags=true|false: 是否获取仓库中的所有镜像,默认为否

--disable-content-trust: 取消镜像的内容校验  默认为真

有时,需要使用镜像代理服务器来加速Docker镜像获取过程,可以再Docker服务启动配置中增加--registry -mirror=proxy_URL来指定镜像代理服务地址(如https://registry.docker-cn.com)

下载镜像到本地之后,可以随时使用镜像了


实例:利用该镜像创建一个容器,运行bash应用,并打印一个“hello world”命令

$ sudo docker run -t -i ubuntu /bin/bash
root@fe7fc4bd8fc9:/#echo  "hello world"
root@fe7fc4bd8fc9:exit

                                  

五、搜索镜像 docker  search ...

语法:docker  search [OPTIONS]  镜像名

options:

--automated :只列出 automated build类型的镜像

--no-trunc :显示完整的镜像描述

-f,--filter filter:格式化输出内容

--limit int:限制输出结果个数,默认为25个


例如:搜索收藏数大于10的java镜像

[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker search -f stars=10 java
NAME    DESCRIPTION                             STARS     OFFICIAL   AUTOMATED
node    Node.js is a JavaScript-based platform for s…   10696     [OK]       
tomcat   Apache Tomcat is an open source implementati…   3164      [OK]

   

六、查看docker详细信息  docker  inspect ...

docker inspect 获取镜像的详细信息

语法:docker inspect 镜像名称

[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker inspect hello-world
[
    {
        "Id": "sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412",
        "RepoTags": [
            "hello-world:latest"
        ],
        "RepoDigests": [
            "hello-world@sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-23T23:47:57.442225064Z",
        "Container": "8746661ca3c2f215da94e6d3f7dfdcafaff5ec0b21c9aff6af3dc379a82fbc72",
        "ContainerConfig": {
            "Hostname": "8746661ca3c2",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/hello\"]"
            ],
            "Image": "sha256:b9935d4e8431fb1a7f0989304ec86b3329a99a25f5efdc7f09f3f8c41434ca6d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/hello"
            ],
            "Image": "sha256:b9935d4e8431fb1a7f0989304ec86b3329a99a25f5efdc7f09f3f8c41434ca6d",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 13256,
        "VirtualSize": 13256,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/d6b0548cb8da112535fdfcaa6c981a1c6570a99bb001712752f5dca8e4f7d3fe/merged",
                "UpperDir": "/var/lib/docker/overlay2/d6b0548cb8da112535fdfcaa6c981a1c6570a99bb001712752f5dca8e4f7d3fe/diff",
                "WorkDir": "/var/lib/docker/overlay2/d6b0548cb8da112535fdfcaa6c981a1c6570a99bb001712752f5dca8e4f7d3fe/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]


docker inspect命令的参数可以更快地获得想要的信息

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。


[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker inspect -f '镜像创建时间是:{{.Created}}' hello-world
镜像创建时间是:2021-09-23T23:47:57.442225064Z
[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker inspect -f '{{.Container}}' hello-world
8746661ca3c2f215da94e6d3f7dfdcafaff5ec0b21c9aff6af3dc379a82fbc72


json格式返回  (注意 json 后面跟一个空格)

[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker inspect --format='{{json .Config}}' hello-world
{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/hello"],"Image":"sha256:b9935d4e8431fb1a7f0989304ec86b3329a99a25f5efdc7f09f3f8c41434ca6d","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null}


七、删除镜像

5-1、使用标签删除镜像


docker rmi或docker image rm命令可以删除镜像


格式:docker rmi   IMAGE   [ IMAGE…… ] 

IMAGE可以为标签或ID


选项:

    -f,-force:强制删除镜像,即使有容器依赖它

    -no-prune:不要清理未带标签的父镜像


例如:删除ubuntu 镜像 使用如下命令

[root@iZ8vb9nmgwljcf9m2wxaekZ ~]# docker rmi ubuntu:14.04
Untagged: ubuntu:14.04
Untagged: ubuntu@sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a
Deleted: sha256:13b66b487594a1f2b75396013bc05d29d9f527852d96c5577cc4f187559875d0
Deleted: sha256:e08f4f554d8df6b04f441fcdfe207b6314d3c709daa2b1ef66f79bbfb529b8c4
Deleted: sha256:c28d0c854fd56736ef4456e3c1c4276a28159751dc13fd1b340bd38d69473f7e
Deleted: sha256:f2fa9f4cf8fd0a521d40e34492b522cee3f35004047e617c75fadeb8bfd1e6b7


5-2.使用镜像ID来删除镜像

   语法:docker rmi 容器id

$ docker rmi 8f1bd21bd25c
Untagged:ubuntu:18.04
Deleted:sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342
Deleted:sha256:8ea3b9ba4dd9d448d1ca3ca7afa8989d033532c11050f5e129d267be8de9c1b4
Deleted:sha256:7db5fb90eb6ffb6b5418f76dde5f685601fad200a8f4698432ebf8ba80757576
Deleted:sha256:19a7e879151723856fb640449481c65c55fc9e186405dd74ae6919f88eccce75
Deleted:sha256:c357a3f74f16f61c2cc78dbb0ae1ff8c8f4fa79be9388db38a87c7d8010b2fe4
Deleted:sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c


5-3、清理镜像

语法:docker image prune命令


支持选项包括:

·-a,-all:删除所有无用镜像,不光是临时镜像;

·-filter filter:只清理符合给定过滤器的镜像;

·-f,-force:强制删除镜像,而不进行提示确认。


例如:如下命令会自动清理临时的遗留镜像文件层,最后会提示释放的存储空间

 docker image prune -f
……
Total reclaimed space:1.4 GB




Docker

努力的意义,不在于一定会让你取得多大的成就,只是让你在平凡的日子里,活得比原来的那个自己更好一点。

评论

^