应用容器引擎实践(docker)实验二

2026-09-19我也不知道取什么名字👁 1 阅读📝 820 字6 分钟阅读💬 0 评论
应用容器引擎实践(docker)实验二

实验二:镜像管理 完整总结

一、实验环境

  • Ubuntu Linux
  • Docker(已安装,能运行 docker run hello-world

二、完整实验步骤

1. 拉取镜像

bash
docker pull ubuntu:14.04docker pull hello-world

验证:

bash
docker images

应看到 ubuntu:14.04hello-world


2. 搜索镜像

方式一:Docker Hub 网页搜索

text
https://hub.docker.com/search?q=ubuntu

方式二:终端搜索

bash
docker search ubuntudocker search --filter stars=20 ubuntudocker search --limit 10 ubuntudocker search --no-trunc ubuntu

注意:旧文档写的是 --filters,实际 Docker 新版本用 --filter(单数)。


3. 查看镜像

简单查看

bash
docker imagesdocker images -adocker images -a --no-truncdocker images -q

详细信息

bash
docker inspect hello-worlddocker inspect ubuntu:14.04docker inspect -f '镜像创建时间是:{{.Created}}' hello-worlddocker inspect -f '镜像创建时间是:{{.Created}}' ubuntu:14.04

4. 导出和导入镜像

导出

bash
docker save -o ubuntu.tar ubuntu:14.04# 或docker save ubuntu:14.04 > ubuntu.tar

传输到另一台电脑

bash
scp ubuntu.tar user@目标IP:/home/user/

导入

bash
docker load -i ubuntu.tar# 或docker load < ubuntu.tar

验证:

bash
docker images

5. 配置镜像加速器

bash
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://docker.m.daocloud.io"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker

验证:

bash
docker info | grep -A 5 "Registry Mirrors"

测试拉取:

bash
docker pull centos

6. 删除镜像

两种删除方法

bash
docker rmi hello-worlddocker image rm hello-world

两者本质相同,docker rmidocker image rm 的简写。

删除所有镜像

bash
docker rmi $(docker images -q)

如果镜像被容器占用

bash
docker ps -a                  # 找到占用镜像的容器docker stop <容器ID>          # 如果容器在运行docker rm <容器ID>            # 删除容器docker rmi <镜像名或ID>       # 再删除镜像

强制删除:

bash
docker rmi -f <镜像名或ID>

三、我遇到的问题及解决方法

问题 1:docker search --filters stars=20 ubuntu 报错

text
unknown flag: --filters

原因: Docker 新版本已改用 --filter(单数)。

解决:

bash
docker search --filter stars=20 ubuntu

问题 2:docker search 网络超时

text
Error response from daemon: ... i/o timeout

原因: docker search 直连 Docker Hub 的 index.docker.io,不走镜像加速器,国内网络容易超时。

解决:

  1. 使用 Docker Hub 网页搜索:https://hub.docker.com/search?q=ubuntu
  2. 配置系统代理后重试
  3. 使用第三方镜像站网页搜索
  4. 多试几次,网络恢复后也能成功

后来成功执行了:

bash
docker search --filter stars=20 ubuntu

说明网络或配置已恢复正常(通过配置代理)。


问题 3:删除 hello-world 时报容器占用

text
Error response from daemon: conflict: unable to delete hello-world:latest(must be forced) - container 5b7ab5951f10 is using its referenced image 5e2309035332

原因: 之前运行 hello-world 时创建了容器,容器虽然退出,但记录还在,Docker 认为镜像仍被引用。

解决:

bash
docker ps -a                    # 查看容器docker rm 5b7ab5951f10          # 删除容器docker rmi hello-world          # 再删除镜像

如果容器还在运行,先执行:

bash
docker stop 5b7ab5951f10

四、证明你完成实验的命令

在实验报告中,可以列出以下命令及预期结果,并附截图。

1. 证明镜像已拉取

bash
docker images

预期:看到 ubuntu:14.04hello-world

2. 证明搜索成功

bash
docker search --filter stars=20 ubuntu

预期:列出 star 数 ≥ 20 的 ubuntu 相关镜像。

3. 证明查看镜像详细信息

bash
docker inspect -f '镜像创建时间是:{{.Created}}' ubuntu:14.04

预期:输出 ubuntu:14.04 的创建时间。

4. 证明导出镜像

bash
docker save -o ubuntu.tar ubuntu:14.04ls -lh ubuntu.tar

预期:生成 ubuntu.tar 文件。

5. 证明导入镜像

bash
docker load -i ubuntu.tardocker images

预期:输出 Loaded image: ubuntu:14.04,并且 docker images 中能看到该镜像。

6. 证明镜像加速器已配置

bash
docker info | grep -A 5 "Registry Mirrors"

预期:显示你配置的加速器地址。

7. 证明删除镜像成功

bash
docker ps -adocker rm <容器ID>docker rmi hello-worlddocker images

预期:hello-world 不再出现在镜像列表中。

8. 证明删除所有镜像

bash
docker rmi $(docker images -q)docker images

预期:镜像列表为空(或只剩正在使用的镜像)。


五、实验报告可写内容

  • 实验目的: 熟悉镜像工作原理,掌握常用命令。
  • 实验环境: Ubuntu + Docker。
  • 实验步骤: 拉取、搜索、查看、导出导入、配置加速器、删除。
  • 遇到的问题及解决:
    • --filters 改为 --filter
    • docker search 超时,改用网页搜索 / 代理
    • 删除镜像被容器占用,先删容器再删镜像
  • 实验验证命令及截图。
  • 实验心得: 理解镜像与容器的关系,掌握镜像生命周期管理。
我也不知道取什么名字
技术博客作者
820 字 · 0 评论
2026-09-19

评论 (0)

暂无评论,来写第一条吧

登录后发表评论