docker作业

文章目录


Docker场景化作业实验报告模板

一、实验基本信息

项目 内容
实验名称 Docker生产环境容器操作实训
实验环境 64位Linux系统(CentOS 7)、Docker-CE ≥19.03

二、必做任务实验报告(场景1-6)

场景1:上线发布(后台启动nginx容器)

实验步骤
  1. 拉取nginx镜像:docker pull nginx

  2. 创建并启动容器:docker run -d --name web-prod-01 -p 43000:80 nginx

提交证据
  1. docker ps 输出截图:
  1. 浏览器访问验证截图:

场景2:基础操作(创建/启动/停止/查看)

任务2.1:创建容器
  • 执行命令:docker create -it nginx:latest /bin/bash
  • 提交证据:docker ps -a 输出截图(状态为Created
任务2.2:启动容器
  • 执行命令:docker start 容器ID/名称
  • 提交证据:docker ps -a 输出截图及状态说明
bash 复制代码
## 容器状态显示为Up表示该容器正在运行中
## 
Up 5 seconds:持续运行了 5 秒钟
Up 8 minutes:持续运行了 8 分钟
任务2.3:停止容器
  • 执行命令:docker stop 容器ID/名称
  • 提交证据:docker ps -a 输出截图

场景3:排障进入容器(容器交互)

实验步骤
  1. 进入容器:docker exec -it web-prod-01 /bin/bash
  2. 执行命令:lscat /etc/os-release(或uname -a
  3. 退出容器:exit
  4. 验证容器状态:docker ps
提交证据
  1. 容器交互过程截图(含进入命令、执行命令及输出):

  2. 退出后容器运行状态截图(docker ps输出):

场景4:文件复制(主机↔容器)

任务4.1:宿主机→容器
  • 宿主机创建文件:echo "学号+姓名" > ~/test.txt
  • 执行复制命令:docker cp ~/test.txt web-prod-01:/opt/
  • 提交证据:
    1. cat ~/test.txt

    2. 容器内验证命令docker exec web-prod-01 cat /opt/test.txt

任务4.2:容器→宿主机
  • 执行复制命令:docker cp web-prod-01:/opt/test.txt ~/abc123.txt
  • 提交证据:cat ~/abc123.txt

场景5:容器迁移(导出与导入)

任务5.1:导出容器
  • 执行命令:docker export web-prod-01 > web-prod-01.tar
  • 提交证据:ls -lh web-prod-01.tar
任务5.2:导入镜像
bash 复制代码
- 执行命令:`cat web-prod-01.tar | docker import - web-import:test`
//  列出本地所有的 Docker 镜像,过滤出名称包含web-import的镜像
- 提交证据:`docker images | grep web-import` 
5.3export/importsave/load 的区别

答:

bash 复制代码
核心 
1.export/import针对容器
2.save/load针对镜像
3.save/load保留镜像的完整元数据
4.export/import仅保留容器文件系统,元数据丢失。

场景6:下线与清理(删除与批量删除)

任务6.1:删除指定容器
  • 执行命令:docker stop web-prod-01docker rm web-prod-01
  • 提交证据:docker ps -a | grep web-prod-01
任务6.2:批量停止所有容器
  • 选择方式:方式1(docker stop $(docker ps -q)

  • 方式2(docker ps -a | awk 'NR>=2{print $1}' | xargs docker stop

  • 提交证据:docker ps 输出截图、

任务6.3:删除所有容器
  • 选择方式:方式1(docker rm -f $(docker ps -aq)

  • 方式2(docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm

  • 提交证据:docker ps -a 输出截图(结果为空)

任务6.4:批量删除镜像
  • 选择方式:方式1(删除所有:docker rmi -f $(docker images -q)

  • 方式2(删除none镜像:docker images | grep none | awk '{print $3}' | xargs docker rmi

  • 提交证据:docker images 输出截图

6.5:生产环境不建议直接执行"删除所有容器/镜像"的原因:
bash 复制代码
是因为会立刻中断正在运行的业务、丢失容器内未持久化的数据,造成损失,同时删掉的镜像 如果没备份难以尽快速恢复,还可能打断关联服务的依赖链,引发连锁故障。

三、加分任务:网络模式实验报告

场景1:bridge模式(默认模式)

实验步骤
bash 复制代码
1. 运行容器:`docker run -d --name nginx-bridge -p 8080:80 nginx`
// 启动一个名为 nginx-bridge 的 Nginx 容器,将主机 8080 端口映射到容器 80 端口
2. 查看容器IP:`docker inspect -f '{{.NetworkSettings.Networks.bridge.IPAddress}}' nginx-bridge`
3. 访问验证:浏览器访问`http://192.168.10.18:8080`




思考题(必答)
  1. 为什么外部不能直接访问容器IP?
    :因为容器 IP 是 "内部私有地址",不具备跨网络路由能力
  2. bridge模式下端口映射的作用是什么?
    :防止端口占用,实现外部网络访问容器
    :端口映射将 "容器内部端口" 绑定到 "宿主机的公网 / 局域网 IP 端口",使外部设备可通过宿主机 IP: 映射端口间接访问容器服务。

场景2:host模式(高性能服务)

实验步骤
  1. 运行容器:docker run -d --name nginx-host --network host nginx

  2. 查看网络信息:docker exec nginx-host ifconfig(或ip addr

  3. 访问验证:浏览器访问http://宿主机IP:80

思考题(必答)
  1. host模式下,容器有没有独立IP?

    :没有,因为host模式会让容器直接共享主机的网络命名空间,没有独立的ip、端口、网卡等,是直接使用宿主机的IP和端口

  2. host模式适合什么类型的应用?

    :高吞吐网络服务;监控宿主机;极简轻量化应用:无需独立网络配置,快速部署。

  3. host模式的安全风险是什么?

    :容器时用宿主机的IP和端口 及所有网络资源,一旦被入侵,可能导致宿主机被攻击;

    :没做端口映射 端口被占用

    :获取主机信息,泄露主机网络环境

场景3:container模式(Sidecar)

实验步骤
  1. 启动主容器:docker run -itd --name main-container centos:7 /bin/bash
  2. 查看主容器PID:docker inspect -f '{``{.State.Pid}}' main-container
  3. 查看主容器网络命名空间:ls -l /proc/主容器PID/ns/net
  4. 启动辅助容器:docker run -itd --name sidecar --net=container:main-container centos:7 /bin/bash
  5. 查看辅助容器网络命名空间:ls -l /proc/辅助容器PID/ns/net
  6. 通信测试:docker exec sidecar ping localhost
思考题(必答)
  1. container模式与host模式的区别?
bash 复制代码
container:指定容器的网络命名空间,与目标容器处于同一网络环境。容器通过虚拟网桥与宿主机和其他容器通信。
host:直接共享宿主机的网络命名空间,完全绕过容器的网络隔离机制。容器共享宿主机的网络栈,直接使用宿主机的 IP 地址
  1. 为什么称这种模式为Sidecar(边车模式)?
    :辅助容器(Sidecar)与主容器共享网络、存储等资源;辅助容器负责辅助功能(如日志收集、服务代理、监控),主容器负责核心业务。

场景4:自定义bridge网络(固定IP)

实验步骤
  1. 创建自定义网络:docker network create --subnet=172.18.0.0/16 mynetwork

  2. 启动容器并指定IP:

    • docker run -itd --name app-1 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
    • docker run -itd --name app-2 --net mynetwork --ip 172.18.0.11 centos:7 /bin/bash
  3. 容器间通信测试:docker exec app-1 ping 172.18.0.11

思考题(必答)
  1. 为什么默认bridge不能指定IP?

    1、避免IP冲突

    2、自动分配降低用户操作成本

  2. 自定义网络适合什么场景?

    1、需要为容器分配固定IP以保证服务地址稳定的环境

    2、隔离其他网络的容器,安全度需求高的场景

    3、多容器集群

  3. Docker如何实现容器间二层通信?

    1、Docker 通过网络命名空间 + 虚拟网桥 + Veth

    2、实现容器间的二层(数据链路层)通信

    网络命名空间隔离:每个容器有独立的网络命名空间,包含独立的网卡、IP、路由等;

    3、Veth 对连接容器与网桥:为每个容器创建一对虚拟网卡(Veth Pair),一端在容器的网络命名空间内(作为容器网卡),另一端连接到 Docker 网桥(如默认的docker0);

    4、网桥转发二层流量:Docker 网桥作为二层设备,接收 Veth 对转发的容器流量,通过 MAC 地址表学习容器的 MAC 地址,实现同一网桥下容器间的二层帧转发。

相关推荐
qq_353737542 小时前
国内外通用一键跨版本升级教程(封禁国外VPS适用)
运维
代码游侠2 小时前
应用——基于Linux的音乐播放器项目
linux·运维·笔记·学习·算法
wniuniu_2 小时前
ceph运维
运维·javascript·ceph
野蛮人6号3 小时前
p29 docker08-docker基础-本地目录挂载 无法正确添加mysql 点击更新后data没有正常显示
mysql·docker·容器
峰顶听歌的鲸鱼3 小时前
15.docker:网络
运维·网络·docker·容器·云计算·php·学习方法
Asurplus3 小时前
【Arbess】1、安装Arbess
ci/cd·docker·centos·arbess
wangchen_03 小时前
Linux文件描述符定时器:timerfd系列接口
linux·运维·服务器
Trouvaille ~3 小时前
【Linux】目录、路径与软硬链接:Linux文件组织的奥秘
linux·运维·服务器·chrome·文件系统·软硬链接·路径缓存
张太行_3 小时前
Linux shell中设置串口参数
linux·运维·chrome