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

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

实验三:容器管理 实验报告

一、实验目的

  1. 熟悉容器的基本工作原理;
  2. 掌握容器操作的常用命令。

二、实验环境

  • Ubuntu 20.04 / Linux
  • Docker
  • Shell:zsh / bash

三、实验内容

  1. 练习使用容器操作的常用命令;
  2. 掌握创建、启动、查看、停止、删除、进入容器等操作。

四、完整操作步骤

1. 配置镜像加速器(可选,实验二已配可跳过)

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# 验证docker info | grep -A 5 "Registry Mirrors"

2. 拉取 busybox 镜像

bash
docker pull busybox

验证:

bash
docker images

3. 创建容器 busybox1

bash
docker create --name busybox1 busybox

说明:docker create 只创建容器,不启动。


4. 创建并启动交互式容器 test5

bash
docker run -it --name test5 busybox sh

进入容器后可以看到 / # 提示符,说明已经进入 busybox 容器内部。

可以在容器内执行:

bash
lspwdecho hello

退出但保持容器运行:

text
Ctrl + PCtrl + Q

注意:不要按 exit,否则容器主进程结束,容器会停止。


5. 查看本地容器信息

bash
# 正在运行的容器docker ps# 所有容器,包括已停止的docker ps -a# 最近一次创建的容器docker ps -l# 最近创建的 5 个容器docker ps -n 5

6. 查看容器详细信息与 IP

bash
docker inspect test5

查看容器 IP:

bash
docker start test5docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' test5

预期输出示例:

text
172.17.0.2

实验文档中写的 NetworkSetting 少了一个 s,正确写法是 NetworkSettings


7. 查看容器日志

bash
# 持续跟踪日志并加时间戳,显示最后 10 行docker logs -f -t --tail 10 test5# 查看最近 30 分钟日志docker logs --since 30m test5# 查看最后 10 行并加时间戳docker logs -t --tail=10 test5

实验文档中写的 --f --t 应为 -f -t


8. 停止、启动、重启、杀死容器

bash
docker stop test5docker start test5docker restart test5docker kill test5

强制停止一个容器:

bash
docker kill test5# 或docker stop -t 0 test5

9. 进入容器

方法一:docker exec(推荐)

bash
docker start test5docker exec -it test5 sh

退出方式:

  • 输入 exit:只退出这个 exec 的 shell,容器继续运行;
  • 或按 Ctrl+P Ctrl+Q:脱离容器,容器继续运行。

方法二:docker attach

bash
docker attach test5

退出方式:

text
Ctrl + PCtrl + Q

不要按 Ctrl+C,否则可能导致容器停止。


10. 删除容器

bash
# 先停止容器docker stop test5# 删除容器docker rm test5# 强制删除运行中的容器docker rm -f test5

删除所有容器:

bash
# 先停止所有正在运行的容器docker stop $(docker ps -q)# 再删除所有容器docker rm $(docker ps -a -q)

如果仍有运行中的容器导致删除失败:

bash
docker rm -f $(docker ps -a -q)

验证:

bash
docker ps -a

11. 创建 test6 并挂载数据卷,然后删除容器与数据卷

bash
# 以 ubuntu:14.04 为基础镜像启动容器 test6,并挂载 /homedocker run -dit --name test6 -v /home ubuntu:14.04# 查看容器docker ps# 停止容器docker stop test6# 删除容器并删除关联数据卷docker rm -v test6# 验证docker ps -a

实验文档中提到的 httpd01 可能是笔误,这里按 test6 完成。


12. 清理所有容器并最终验证

bash
docker stop $(docker ps -q) 2>/dev/nulldocker rm $(docker ps -a -q) 2>/dev/nulldocker rm -f $(docker ps -a -q) 2>/dev/nulldocker ps -a

最终预期输出:只剩表头,没有任何容器。

text
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

五、遇到的问题和解决方法

问题 原因 解决方法
docker exec -it test5 shcontainer is not running 容器已停止 先执行 docker start test5
docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' test5 返回 invalid IP 容器未运行,没有分配 IP 先启动容器,再查看 IP
docker rm -v test6container is running 容器正在运行,不能直接删除 docker stop test6,再 docker rm -v test6
docker stop $(docker ps -q)requires at least 1 argument 当前没有正在运行的容器 正常现象,可忽略,或加 2>/dev/null
docker rm busybox1No such container 该容器已经被之前批量删除 正常现象,说明已经清理干净
docker rm $(docker ps -a -q)cannot remove running container 有容器还在运行 docker stop,或使用 docker rm -f
实验文档写 docker exec --it 参数写法错误 正确写法是 docker exec -it
实验文档写 NetworkSetting 少了一个 s 正确写法是 NetworkSettings
实验文档写 docker logs --f --t 参数写法不规范 正确写法是 docker logs -f -t

六、证明完成实验的命令

以下命令可用于截图证明实验完成。

1. 证明镜像已拉取

bash
docker images

预期:能看到 busyboxubuntu:14.04 等镜像。

2. 证明创建容器成功

bash
docker create --name busybox1 busybox

预期:返回容器 ID。

3. 证明启动容器成功

bash
docker run -it --name test5 busybox sh

预期:进入容器,显示 / #

4. 证明查看容器信息成功

bash
docker psdocker ps -adocker ps -ldocker ps -n 5

预期:能看到 test5busybox1 等容器信息。

5. 证明查看容器 IP 成功

bash
docker start test5docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' test5

预期输出:172.17.0.2 或类似 IP。

6. 证明查看日志成功

bash
docker logs -t --tail=10 test5

预期:显示带时间戳的容器日志。

7. 证明停止、启动、重启、杀死成功

bash
docker stop test5docker start test5docker restart test5docker kill test5

预期:分别返回容器名 test5

8. 证明进入容器成功

bash
docker start test5docker exec -it test5 sh

预期:进入容器,显示 / #

bash
docker attach test5

预期:进入容器,按 Ctrl+P Ctrl+Q 可退出且容器不停止。

9. 证明删除容器成功

bash
docker stop test5docker rm test5docker rm -f test5

预期:返回 test5 或提示不存在。

10. 证明删除所有容器成功

bash
docker stop $(docker ps -q) 2>/dev/nulldocker rm $(docker ps -a -q) 2>/dev/nulldocker rm -f $(docker ps -a -q) 2>/dev/nulldocker ps -a

预期:docker ps -a 只剩表头。

11. 证明 test6 挂载数据卷并删除卷成功

bash
docker run -dit --name test6 -v /home ubuntu:14.04docker psdocker stop test6docker rm -v test6docker ps -a

预期:test6 被创建、停止、删除,docker ps -a 中不再有 test6

12. 最终验证

bash
docker ps -a

预期输出:

text
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

表示所有容器已清理完毕。


七、实验心得

  1. 容器是镜像的运行实例,镜像相当于模板,容器相当于运行中的程序。
  2. docker run 相当于 docker create + docker start
  3. docker exec 适合进入运行中的容器,退出后容器通常继续运行。
  4. docker attach 连接到容器主进程,退出时建议使用 Ctrl+P Ctrl+Q,不要随意按 Ctrl+C
  5. 删除容器前必须先停止容器,或使用 docker rm -f 强制删除。
  6. docker rm -v 可以同时删除容器关联的数据卷。
  7. 批量清理容器时,先停止所有容器,再删除所有容器,可以避免 “cannot remove running container” 错误。
  8. 实验文档中存在一些旧语法或笔误,例如 --filters--itNetworkSetting,实际使用时需要根据当前 Docker 版本修正。

八、最终结果

  • docker ps -a 输出只剩表头,说明所有容器已删除;
  • docker images 中镜像仍然保留,说明镜像与容器相互独立;
  • 实验三“容器管理”完成。
我也不知道取什么名字
技术博客作者
1353 字 · 0 评论
2026-09-19

评论 (0)

暂无评论,来写第一条吧

登录后发表评论