实验二:镜像管理 完整总结
一、实验环境
- Ubuntu Linux
- Docker(已安装,能运行
docker run hello-world)
二、完整实验步骤
1. 拉取镜像
bashdocker pull ubuntu:14.04docker pull hello-world
验证:
bashdocker images
应看到 ubuntu:14.04 和 hello-world。
2. 搜索镜像
方式一:Docker Hub 网页搜索
texthttps://hub.docker.com/search?q=ubuntu
方式二:终端搜索
bashdocker search ubuntudocker search --filter stars=20 ubuntudocker search --limit 10 ubuntudocker search --no-trunc ubuntu
注意:旧文档写的是
--filters,实际 Docker 新版本用--filter(单数)。
3. 查看镜像
简单查看
bashdocker imagesdocker images -adocker images -a --no-truncdocker images -q
详细信息
bashdocker inspect hello-worlddocker inspect ubuntu:14.04docker inspect -f '镜像创建时间是:{{.Created}}' hello-worlddocker inspect -f '镜像创建时间是:{{.Created}}' ubuntu:14.04
4. 导出和导入镜像
导出
bashdocker save -o ubuntu.tar ubuntu:14.04# 或docker save ubuntu:14.04 > ubuntu.tar
传输到另一台电脑
bashscp ubuntu.tar user@目标IP:/home/user/
导入
bashdocker load -i ubuntu.tar# 或docker load < ubuntu.tar
验证:
bashdocker images
5. 配置镜像加速器
bashsudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://docker.m.daocloud.io"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
验证:
bashdocker info | grep -A 5 "Registry Mirrors"
测试拉取:
bashdocker pull centos
6. 删除镜像
两种删除方法
bashdocker rmi hello-worlddocker image rm hello-world
两者本质相同,docker rmi 是 docker image rm 的简写。
删除所有镜像
bashdocker rmi $(docker images -q)
如果镜像被容器占用
bashdocker ps -a # 找到占用镜像的容器docker stop <容器ID> # 如果容器在运行docker rm <容器ID> # 删除容器docker rmi <镜像名或ID> # 再删除镜像
强制删除:
bashdocker rmi -f <镜像名或ID>
三、我遇到的问题及解决方法
问题 1:docker search --filters stars=20 ubuntu 报错
textunknown flag: --filters
原因: Docker 新版本已改用 --filter(单数)。
解决:
bashdocker search --filter stars=20 ubuntu
问题 2:docker search 网络超时
textError response from daemon: ... i/o timeout
原因: docker search 直连 Docker Hub 的 index.docker.io,不走镜像加速器,国内网络容易超时。
解决:
- 使用 Docker Hub 网页搜索:
https://hub.docker.com/search?q=ubuntu - 配置系统代理后重试
- 使用第三方镜像站网页搜索
- 多试几次,网络恢复后也能成功
后来成功执行了:
bashdocker search --filter stars=20 ubuntu
说明网络或配置已恢复正常(通过配置代理)。
问题 3:删除 hello-world 时报容器占用
textError response from daemon: conflict: unable to delete hello-world:latest(must be forced) - container 5b7ab5951f10 is using its referenced image 5e2309035332
原因: 之前运行 hello-world 时创建了容器,容器虽然退出,但记录还在,Docker 认为镜像仍被引用。
解决:
bashdocker ps -a # 查看容器docker rm 5b7ab5951f10 # 删除容器docker rmi hello-world # 再删除镜像
如果容器还在运行,先执行:
bashdocker stop 5b7ab5951f10
四、证明你完成实验的命令
在实验报告中,可以列出以下命令及预期结果,并附截图。
1. 证明镜像已拉取
bashdocker images
预期:看到 ubuntu:14.04、hello-world。
2. 证明搜索成功
bashdocker search --filter stars=20 ubuntu
预期:列出 star 数 ≥ 20 的 ubuntu 相关镜像。
3. 证明查看镜像详细信息
bashdocker inspect -f '镜像创建时间是:{{.Created}}' ubuntu:14.04
预期:输出 ubuntu:14.04 的创建时间。
4. 证明导出镜像
bashdocker save -o ubuntu.tar ubuntu:14.04ls -lh ubuntu.tar
预期:生成 ubuntu.tar 文件。
5. 证明导入镜像
bashdocker load -i ubuntu.tardocker images
预期:输出 Loaded image: ubuntu:14.04,并且 docker images 中能看到该镜像。
6. 证明镜像加速器已配置
bashdocker info | grep -A 5 "Registry Mirrors"
预期:显示你配置的加速器地址。
7. 证明删除镜像成功
bashdocker ps -adocker rm <容器ID>docker rmi hello-worlddocker images
预期:hello-world 不再出现在镜像列表中。
8. 证明删除所有镜像
bashdocker rmi $(docker images -q)docker images
预期:镜像列表为空(或只剩正在使用的镜像)。
五、实验报告可写内容
- 实验目的: 熟悉镜像工作原理,掌握常用命令。
- 实验环境: Ubuntu + Docker。
- 实验步骤: 拉取、搜索、查看、导出导入、配置加速器、删除。
- 遇到的问题及解决:
--filters改为--filterdocker search超时,改用网页搜索 / 代理- 删除镜像被容器占用,先删容器再删镜像
- 实验验证命令及截图。
- 实验心得: 理解镜像与容器的关系,掌握镜像生命周期管理。





