搜索镜像
Docker官网:https://hub.docker.com/
- 可以直接在Docker官网搜索镜像,然后点击下图所示位置复制命令

- 命令行搜索镜像
docker search [镜像名]
[root@server ~]# docker search centos

- NAME :镜像仓库的名字
- DESCRIPTION:镜像仓库的描述
- STARS:表明使用者对这个仓库的满意度
- OFFICIAL:是否为软件作者官方提供的镜像
- AUTOMATED:有些镜像并不是作者手动上传的,而是作者提供了这个镜像的制作步骤
下载镜像
使用docker pull命令直接下载镜像,语法为:
docker pull NAME:TAG
其中,NAME是镜像名称,TAG是镜像的标签(往往用来是表示版本信息)
通常情况下,描述一个镜像需要包括名称:标签,如果不指定标签,标签的值默认为latest
下载nginx、centos7、hello-world镜像
[root@server ~]# docker pull nginx[root@server ~]# docker pull centos:7[root@server ~]# docker pull hello-world
查看镜像信息
docker images
- 列出本地的所有镜像
[root@server ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest c919045c4c2b 12 days ago 142MBhello-world latest feb5d9fea6a5 5 months ago 13.3kBcentos 7 eeb6ee3f44bd 5 months ago 204MBcentos latest 5d0da3dc9764 5 months ago 231MB
REPOSITORY:镜像仓库名称
TAG:镜像的标签信息
IMAGE ID:唯一用来标识镜像,如果两个镜像的ID相同,说明他们实际上指向了同一个镜像,只是具有不同标签名称而已
CREATED:创建时间,说明镜像的最后更新时间
SIZE:镜像大小,优秀的镜像往往体积都较小
docker tag
可以使用docker tag命令来为本地镜像任意添加新的标签,方便在后续工作中使用特定镜像
[root@server ~]# docker tag centos:7 mycentos:7[root@server ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest c919045c4c2b 12 days ago 142MBhello-world latest feb5d9fea6a5 5 months ago 13.3kBcentos 7 eeb6ee3f44bd 5 months ago 204MBmycentos 7 eeb6ee3f44bd 5 months ago 204MBcentos latest 5d0da3dc9764 5 months ago 231MB
docker inspect
使用docker inspect命令获取该镜像的详细信息
[root@server ~]# docker inspect centos:7[{"Id": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9","RepoTags": ["centos:7","mycentos:7"],"RepoDigests": ["centos@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407"],"Parent": "","Comment": "","Created": "2021-09-15T18:20:23.99863383Z","Container": "5e4c7bfd35862166e9efd7532208300600114f0acff8f82fd537a57bdd523fe2","ContainerConfig": {"Hostname": "5e4c7bfd3586","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:ba35a4b787c8f11e3b6ed9248c7663b4f27459e9715a1ace09f966259d5ebc3a","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20201113","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS","org.opencontainers.image.created": "2020-11-13 00:00:00+00:00","org.opencontainers.image.licenses": "GPL-2.0-only","org.opencontainers.image.title": "CentOS Base Image","org.opencontainers.image.vendor": "CentOS"}},"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": ["/bin/bash"],"Image": "sha256:ba35a4b787c8f11e3b6ed9248c7663b4f27459e9715a1ace09f966259d5ebc3a","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20201113","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS","org.opencontainers.image.created": "2020-11-13 00:00:00+00:00","org.opencontainers.image.licenses": "GPL-2.0-only","org.opencontainers.image.title": "CentOS Base Image","org.opencontainers.image.vendor": "CentOS"}},"Architecture": "amd64","Os": "linux","Size": 203936249,"VirtualSize": 203936249,"GraphDriver": {"Data": {"MergedDir": "/var/lib/docker/overlay2/121b6feb2e1cf2c859a7e34b36d26a067d040ab8170d362eba9a727f7d21d689/merged","UpperDir": "/var/lib/docker/overlay2/121b6feb2e1cf2c859a7e34b36d26a067d040ab8170d362eba9a727f7d21d689/diff","WorkDir": "/var/lib/docker/overlay2/121b6feb2e1cf2c859a7e34b36d26a067d040ab8170d362eba9a727f7d21d689/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02"]},"Metadata": {"LastTagTime": "2022-03-13T23:12:19.870984587+08:00"}}]
docker history
docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构
一个docker镜像由多个可读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,任何的对文件的更改都只存在此容器层,因此任何对容器的操作均不会影响到镜像

可以使用docker history命令,该命令将列出各层创建信息
[root@server ~]# docker history centos:7
IMAGE CREATED CREATED BY SIZE COMMENT
eeb6ee3f44bd 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 5 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 5 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB
镜像导入导出
镜像导出
可以将镜像从本地导出为一个压缩文件,然后复制到其他服务器进行导入使用
- 导出方法一:
docker save 镜像 -o 导出后目录
[root@server ~]# docker save centos:latest -o /opt/centos.tar.gz
[root@server ~]# ll /opt/centos.tar.gz -h
-rw------- 1 root root 228M 3月 13 23:22 /opt/centos.tar.gz
- 导出方法二:
docker save 镜像 > 导出后目录
[root@server ~]# docker save centos:latest > /opt/centos-1.tar.gz
[root@server ~]# ll /opt/centos-1.tar.gz -h
-rw-r--r-- 1 root root 228M 3月 13 23:23 /opt/centos-1.tar.gz
镜像导入
先将导出的镜像发到需要导入的docker服务器中,然后进行导入
- 导入方法一:
docker load -i 镜像压缩包目录
[root@server ~]# docker load -i /opt/centos.tar.gz
74ddd0ec08fa: Loading layer [==================================================>] 238.6MB/238.6MB
Loaded image: centos:latest
- 导入方法二:
docker load < 镜像压缩包目录
[root@server ~]# docker load < /opt/centos.tar.gz
Loaded image: centos:latest
镜像删除
- 镜像的删除可以使用命令
docker rmi [镜像名/镜像ID]
[root@server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c919045c4c2b 12 days ago 142MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
centos 7 eeb6ee3f44bd 5 months ago 204MB
mycentos 7 eeb6ee3f44bd 5 months ago 204MB
centos latest 5d0da3dc9764 5 months ago 231MB
[root@server ~]# docker rmi hello-world:latest
Untagged: hello-world:latest
Untagged: hello-world@sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
[root@server ~]# docker rmi 5d0d
Untagged: centos:latest
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
- 对于一些无法删除的镜像,可以使用命令
docker rmi -f [镜像名/镜像ID]
# 情况一:镜像ID指向了多个REPOSITORY(镜像仓库)
[root@server ~]# docker rmi eeb6
Error response from daemon: conflict: unable to delete eeb6ee3f44bd (must be forced) - image is referenced in multiple repositories
[root@server ~]# docker rmi -f eeb6
Untagged: centos:7
Untagged: centos@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Untagged: mycentos:7
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
# 情况二:有容器在使用这个镜像,最好不要采取这种方式
[root@server ~]# docker rmi nginx:latest
Error response from daemon: conflict: unable to remove repository reference "nginx:latest" (must force) - container f0e9083b87e6 is using its referenced image c919045c4c2b
[root@server ~]# docker rmi -f nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:1c13bc6de5dfca749c377974146ac05256791ca2fe1979fc8e8278bf0121d285
当有容器在使用镜像时,如果将这个镜像强行删除,那么镜像会变成none,但是容器却在正常运行
[root@server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> c919045c4c2b 12 days ago 142MB
[root@server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0e9083b87e6 c919045c4c2b "/docker-entrypoint.…" 48 minutes ago Up 48 minutes 80/tcp nginx-1
一定要在对应的镜像的容器退出运行时,才可以删除这个镜像,否则会有BUG出现!!!
镜像上传
上传至官方Docker仓库
- 首先需要有一个账户

- 登录到仓库
[root@server ~]# docker login docker.io
Username: moodye
Password:
[root@server ~]# cat .docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "bW9vZHllOnN1eXVhbjgyMnpseTUyMA=="
}
}
}
- 给镜像打上标签并上传
[root@server ~]# docker tag nginx:v1 docker.io/moodye/nginx:v1
[root@server ~]# docker push docker.io/moodye/nginx:v1

其次,还可以上传到阿里云仓库或者Docker Harbor等仓库
