镜像是Docker的三大核心概念中最为重要的。Docker运行容器前需要本地存在对应的镜像,若没有镜像存在与本地,会先从仓库从获取下载。

获取镜像

docker官方提供数十万个镜像供大家下载,包括且不限于常用的ubuntu、apache、nginx、mysql、mongodb等常用的服务器及数据库等。

image-20200816204834869

可使用docker pull命令从镜像源下载镜像。

docker pull:获取镜像

# 下载镜像 docker pull 镜像名[:tag]

root@ubuntu:~# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
3ff22d22a855: Pull complete
e7cb79d19722: Pull complete
323d0d660b6a: Pull complete
b7f616834fd0: Pull complete
Digest: sha256:5d1d5407f353843ecf8b16524bc5565aa332e9e6a1297c73a92d3e754b8a636d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

# 通过下载过程,可以看到,一个镜像一般是由多个层(layer) 组成,类似 f7e2b70d04ae这样的串表示层的唯一 ID。
# PS: 实际上完整的 ID 包括了 256 个 bit, 64 个十六进制字符组成的。

docker images 查看所有本地的主机上的镜像

docker images  #列出本地的镜像
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 创建的时间
SIZE 镜像的大小

# 可选项
-a --all 显示所有镜像,包括中间层
-q --quiet 仅显示镜像ID

docker search 搜索镜像

root@ubuntu:~# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 9520 [OK]
mariadb MariaDB is a community-developed fork of M... 3456 [OK]

# 可选项
--filter=STARS=3000 搜索starts>3000的镜像
root@a5-vm04:~# docker search mysql --filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 9520 [OK]

docker rmi 删除镜像

docker rmi ID 删除指定的镜像
docker rmi -f $(docker images -aq) 删除全部的镜像

查看镜像

使用inspect命令查看镜像详细信息

通过docker inspect命令,可以获取镜像的详细信息,其中包括创建者、各层的数字摘要等。

root@ubuntu:~# docker inspect ubuntu
[
{
"Id": "sha256:1e4467b07108685c38297025797890f0492c4ec509212e2e4b4822d367fe6bc8",
"RepoTags": [
"ubuntu:latest"
],
"RepoDigests": [
"ubuntu@sha256:5d1d5407f353843ecf8b16524bc5565aa332e9e6a1297c73a92d3e754b8a636d"
],
"Parent": "",
"Comment": "",
"Created": "2020-07-24T14:38:35.464294608Z",
"Container": "9d62e8d762827123636cb28eacfed9975890fd659cac66adee63fc3a969bb8a9",
"ContainerConfig": {
"Hostname": "9d62e8d76282",
"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\"]"
],
"ArgsEscaped": true,
"Image": "sha256:905a090e9b85447aff61cda51518fc1ab45af28e185981b70bc73dc9c03abf13",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "18.09.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": [
"/bin/bash"
],
"ArgsEscaped": true,
"Image": "sha256:905a090e9b85447aff61cda51518fc1ab45af28e185981b70bc73dc9c03abf13",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 73859057,
"VirtualSize": 73859057,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/0d948d7943f1db41d38707ae39e87bcf6dc842dbeb77c3b3ba332e366d38c02e/diff:/var/lib/docker/overlay2/b2160599c8339e155b44534f956ae2d1dab00cdf9e8cbbb1f013d5581f0771b8/diff:/var/lib/docker/overlay2/e64630287d462a45307b48add39bd3959d3c7e7c6b3404dd4c41e241d5d90b65/diff",
"MergedDir": "/var/lib/docker/overlay2/d4e7ee51914e5a7b57f24cdff4882a9810c628d4fa3db1f806c2c5b259188085/merged",
"UpperDir": "/var/lib/docker/overlay2/d4e7ee51914e5a7b57f24cdff4882a9810c628d4fa3db1f806c2c5b259188085/diff",
"WorkDir": "/var/lib/docker/overlay2/d4e7ee51914e5a7b57f24cdff4882a9810c628d4fa3db1f806c2c5b259188085/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ce30112909569cead47eac188789d0cf95924b166405aa4b71fb500d6e4ae08d",
"sha256:8eeb4a14bcb4379021c215017c94800a848a8203a8ce76aa1bd211d4c995f792",
"sha256:a37e74863e723df4ddd599ef1b7d9a68e2301794a8c37c2370f8c2c8993ef72c",
"sha256:095624243293a7dfdb582f8471d6e2d9d7772dd621bc57906b034c59f388ebac"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]

使用history命令查看镜像历史

通过docker history命令,可以列出各个层(layer)的创建信息。

root@ubuntu:~# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
1e4467b07108 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 3 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B
<missing> 3 weeks ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 1.01MB
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:65a1cc50a9867c153… 72.9MB