Docker 镜像

在Docker中,一切都基于镜像。镜像是文件系统和参数的组合。Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器基础,仓库是存放镜像的场所,可见镜像更是Docker的核心。本文主要介绍一下Docker 镜像及相关命令。

1、Docker 镜像简介

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。Docker 镜像属于整个结构中的镜像层,如下图,


镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts)等。镜像作为 Docker 最突出的创新之一,它变革了软件交付标准。理解镜像,对理解整个 Docker 的生命周期非常重要。

2、查看Docker 镜像

要查看系统上的Docker镜像列表,可以使用如下命令:

docker images

该命令用于显示当前系统上安装的所有镜像。执行docker images命令输出结果如下图:


从上面的输出中,可以看到服务器有七个映像。每个图像具有以下属性:

TAG :用于逻辑上的镜像标签。

Image ID :镜像ID,用于唯一地标识图像。

Created :镜像创建时间,创建以来的天数。

Size :镜像占用空间的大小

注意:一个仓库中可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本。

3、下载Docker 镜像

我们可以手动使用docker pull直接下载镜像,也可以当使用docker run运行容器时,使用的镜像如果在本地中不存在,docker 自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。如下,

docker pull image

或者

docker run image 

说明:

image:镜像的名称

例如,

使用docker run 命令:

[root@kvm2 ~]# docker run -it  ubuntu:14.04 /bin/bash 
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete 
0551a797c01d: Pull complete 
512123a864da: Pull complete 
Digest: sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a
Status: Downloaded newer image for ubuntu:14.04
root@86451839d6be:/# 

使用docker pull命令:

[root@kvm2 ~]# docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
Digest: sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a
Status: Image is up to date for ubuntu:14.04
[root@kvm2 ~]# 

4、删除镜像

镜像删除使用 docker rmi 命令,如下,

docker rmi ImageID

或者

docker rmi ImageName

说明:

ImageID :需要删除的镜像的Image ID。

ImageName:镜像的名称。

例如,

通过镜像名称删除镜像:

 docker rmi ubuntu:14.04

通过Image ID删除镜像:

docker rmi 81b5c4e5c7a0

注意:通过ImageID删除镜像时,可以使用docker images命令查看Image ID。

5、docker images -q

命令仅输出返回镜像的Image ID。

例如,

[root@kvm2 ~]# docker images -q
13b66b487594
aeb6e1b699dc
ff4ee4caaa23

说明:

q:指示Docker命令返回唯一的Image ID。

6、docker inspect

docker inspect命令用于查看镜像或容器的详细信息。如下,

docker inspect

说明

Repository:镜像的名称或ID。

例如,

[root@kvm2 ~]# docker inspect 13b66b487594
[
    {
        "Id": "sha256:13b66b487594a1f2b75396013bc05d29d9f527852d96c5577cc4f187559875d0",
        "RepoTags": [
            "ubuntu:14.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:60840958b25b5947b11d7a274274dc48ab32a2f5d18527f5dae2962b64269a3a"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-03-25T22:33:44.754436368Z",
        "Container": "a55677c29cfc1b4d4574b70df6fb6aa1db116fecd36b66d33ed480999a14037d",
        "ContainerConfig": {
            "Hostname": "a55677c29cfc",
            "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 [\"/bin/bash\"]"
            ],
            "Image": "sha256:8de4ecfd37404a523d0253873a2b15a274d3657e9f726b472eb82c32ffbc76f4",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "19.03.12",
        "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": [
                "/bin/bash"
            ],
            "Image": "sha256:8de4ecfd37404a523d0253873a2b15a274d3657e9f726b472eb82c32ffbc76f4",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 196513448,
        "VirtualSize": 196513448,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d0ae424cdc59d024b1121a5f0d17a9673252c9b5fb91d83ac83fbdf8bafb4b51/diff:/var/lib/docker/overlay2/016e917db391292baa0e423bc28de5e22bb0ec1105881db26cd57d1a4ac78f4f/diff",
                "MergedDir": "/var/lib/docker/overlay2/64e68dc48bbb5e76eeff2aac7a916790ced29baab9c9a8ea63ebcf46b77a59a3/merged",
                "UpperDir": "/var/lib/docker/overlay2/64e68dc48bbb5e76eeff2aac7a916790ced29baab9c9a8ea63ebcf46b77a59a3/diff",
                "WorkDir": "/var/lib/docker/overlay2/64e68dc48bbb5e76eeff2aac7a916790ced29baab9c9a8ea63ebcf46b77a59a3/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:f2fa9f4cf8fd0a521d40e34492b522cee3f35004047e617c75fadeb8bfd1e6b7",
                "sha256:30d3c4334a2379748937816c01f5c972a8291a5ccc958d6b33d735457a16196e",
                "sha256:83109fa660b2ed9307948505abd3c1f24c27c64009691067edb765bd3714b98d"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

7、镜像标签

使用docker tag 命令可以给镜像打标签,命令用法如下,

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

例如,

docker tag ubuntu ubuntu:v1

注意:可以每开发一个版本打一个标签,如需恢复原来的版本,可以使用指定标签的镜像来创建容器。


推荐阅读
cjavapy编程之路首页