《云计算导论》课程实验报告
- 实验内容
本次 Docker 基础实战有三个部分,我们学习了Docker 的基本操作、镜像管理以及自动化构建镜像,还有选做的数据卷相关操作,这些有关Docker的相关操作为我们在以后实际项目中使用 Docker 进行容器化部署奠定坚实基础。
- Docker基础实战教程一:入门
该部分包括拉取镜像,启动,停止,进入,删除容器,属于比较基础的内容
- Docker基础实战教程二:镜像管理
该部分包括对镜像的定制保存加载,导入导出容器,镜像的删除,构建构建私有Registry
- Docker基础实战教程三:Dockerfile
在该部分学习了Dockerfile的相关操作
- 问题及解决方法
问题1:
问题分析:docker run 命令格式错误,--name 是选项参数,需紧跟 -/-- ,当前写法 --name firstContainer 被识别成要执行的 “可执行文件”,但系统找不到该命令,导致报错 。
解决方法:修正 docker run 命令格式,将 --name 选项放到镜像名 busybox 之后,正确命令:docker run --name firstContainer busybox echo 'hello world'
问题2:
问题分析:在编写 Dockerfile时,使用单引号(')而非双引号(")包裹ENTRYPOINT和CMD的原因主要与Shell 解析和 JSON 格式的严格性有关。避免 Shell 变量替换,当使用双引号(")时,Shell 会尝试解析其中的变量(如 $VAR),单引号会禁用 Shell 的变量替换,确保文本按原样传递。
解决方法:
问题3:
问题分析docker build -t busybox:v3这条命令忽略了要构建镜像的上下文路径
解决方法:添加小数点表示将当前目录设置为上下文路径
问题4:执行删除所有容器的代码时候,失败了。
问题分析:创建了两个容器,有容器正在运行,故删除失败了
解决方法:将删除所有容器的命令和强制删除结合起来,使用docker rm -f $(docker ps -a -q)就可以成功通过。
- 总结
实验结论:
Docker基础实战教程一:入门
- 拉取镜像:docker pull [OPTIONS] <仓库名>:<标签>
- 启动容器:docker run [OPTIONS] 镜像名 [COMMAND] [ARG]
- 停止容器:docker stop [OPTIONS] Container [Container ...]
- 进入容器:docker exec [options] containerName|containerId command [arg]
- 删除容器:docker rm $(docker ps -a -q)
Docker基础实战教程二:镜像管理
- 基于Commit定制镜像docker commit [OPTIONS] CONTAINER [镜像名]
- 保存镜像:docker save [OPTIONS] IMAGE [IMAGE...]
- 加载镜像:docker load [OPTIONS]
- 导出容器:docker export [OPTIONS] CONTAINER
- 导入容器:docker import [OPTIONS] 文件|URL|- [镜像名]
- 删除镜像:docker rmi $(docker images –q redis)
Docker基础实战教程三:Dockerfile
- 创建一个Dockerfile文件:touch Dockerfile
- COPY 指令:COPY <源路径> <目标路径>;
- ADD 指令:ADD <源路径> <目标路径>;
- CMD 指令:CMD [“executable”,”param1”,”param2”]
- ENTRYPOINT 指令:ENTRYPOINT [“executable”,”param1”,”param2”]
- ENV 指令:ENV <key> <value>或ENV <key>=<value>;
- ARG 指令:ARG <参数名>[=<默认值>];
- EXPOSE 指令:EXPOSE <端口1> [<端口2>...]
实验收获:
通过对实验一的学习,我们掌握了拉取镜像及容器启停、进入、删除等基础操作,可灵活管理容器生命周期;熟悉镜像定制、保存加载等管理操作,能构建个性化环境并实现跨环境迁移,构建私有 Registry 解决企业镜像管理问题;理解 Dockerfile 核心作用,学会编写定制化文件封装应用及依赖,实现高效一致部署,优化镜像构建流程。