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