2020系统综合实践 第1次实践作业
2020系统综合实践 第1次实践作业
(1)课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
说实话,本来不知道这门课是干嘛的,听着这名字就跟那种传统的坐在实验室里照着老师ppt跟着做,copy几行代码接几条线跑个流水灯就完事儿的课程一样,丝毫不慌。直到早上看到老师发出博客园班级的二维码,提到上学期的软工实践,心态出现了微妙的变化(小崩)。不过听到第一节课就是要学习docker技术还挺激动,之前在许多大佬的技术博客上就有见到过,终于可以体验一把了。
既来之则安之,emmmm要是软工实践借尸还魂再来一次……只希望这门课既然有2个学分,能循序渐进合理安排好对知识消化吸收的时间,软工实践那种冲不动了💨。还有希望老师能多提供一些相关的学习路径和好的学习资料或经验(不局限于官方文档)。
(2)了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
知乎上一个写的很通俗的回答:知乎:什么是微服务架构
(3)学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:
学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
搭建你自己的docker环境,系统环境不限(主流的有Ubuntu/CentOS/Debian/Windows/MacOS等),完成docker的基本入门,包括但不限于:容器的创建、删除、更新和查询,创建并维护自己的镜像仓库,实现拉取和上传镜像等。
docker仓库链接:docker hub
参考资料:Docker Documentation;Docker教程 | 菜鸟教程
a. docker的相关概念
-
Docker:
Docker
是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。个人感觉最简单的理解就是类似于虚拟机,但是又比虚拟机更轻量,消耗的资源更少。 -
Docker Compose:
Compose
是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 -
Dockerfile:
Dockerfile
是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。DockerFile 菜鸟教程 -
Docker Machine:
Docker Machine
是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。Docker Machine 菜鸟教程
-
Swarm: Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。Swarm 菜鸟教程
-
K8S: 知乎:10分钟看懂Docker和K8S
b.搭建docker环境
虽然之后的课程内容需要在Linux虚拟机上完成,不过为了更好的理解相关的知识,还是打算先尝试在熟悉的环境上进行第一次搭建。
-
本次作业pull的镜像是
ubuntu
。 -
安装Docker 桌面版之后,开始终端操作。
- pull ubuntu镜像
- 查看一下当前有的镜像和容器
- 使用ubuntu镜像创建一个名为zxh_ubuntu的容器,再次查看镜像和容器
- 进入容器并创建文件夹test,进入test,创建hello_world.txt文件,打印helloworld
- 其他的一些删除操作
- 提交容器修改,并定义新镜像zxh_ubuntu。 再次查看镜像和容器,可以发现新增了zxh_ubuntu镜像
- 【❗️❗️❗️这里踩了个坑】尝试将新建的镜像push到dockerHub上,失败。
因为原先已经试验过一次,成功提交到了dockerHub上。在重做一次截图写博客时出现了这个问题,查找了原因以后发现是由于我第二次创建到仓库是直接到doodle目录下创建了个zxh_ubuntu文件夹,而不是“正宗”的docker仓库。查看文档后发现需要定义Dockerfile
相关文件,看了一下语法有点劝退……索性copy了原先pull的示例仓库中的DockerFile文件,并bulid -t以后就可以了。(这样可能还有其他的坑,暂时还不清楚。要自建仓库的话还是需要再去了解一下Dockerfile中语句的含义)
🤔解决过程如下图
- 最后就是提交成功的DockerHub仓库啦
- pull ubuntu镜像
总结:
一、关于镜像的操作
- 从仓库获取镜像
搜索镜像:docker search image_name
搜索结果过滤:
是否官方:docker search --filter "is-official=true" image_name
是否自动化构建:docker search --filter "is-automated=true" image_name
大于多少星:docker search --filter stars=3 image_name
下载镜像:docker pull image_name
- 查看本地镜像:
docker images
- 本地镜像的删除:
docker rmi image_name
删除多个:docker rmi image_name image_name image_name
二、关于容器的操作
- 创建容器:
docker run -itd -p --name=container_name image_name
-i 表示以交互模式运行容器
-d 表示后台运行容器,并返回容器ID
-t 表示为容器重新分配一个伪输入终端
-name 为容器指定名称
-P(大写) 随机分配端口
-p 外部主机端口:docker容器端口 如 -p 8888:8080
- 查看容器(运行中的):
docker ps
- 查看容器(包括已停止的):
docker ps -a
- 启动容器:
docker start container_name/container_id
- 停止容器:
docker stop container_name/container_id
- 重启容器:
docker restart container_name/container_id
- 删除容器:
docker rm container_name/container_id
- 强制停止容器:
docker kill container_name/container_id
三、容器的修改和保存
- 进入容器:
docker exec -it container_name/container_id /bin/bash
- 退出容器:
exit
容器停止退出
ctrl+P+Q
容器不停止退出- 提交修改:
docker commit -a "author" -m "message" container_id/container_name new_image_name:tag_name
-a
: 参数可选,用于指定作者
-m
: 参数可选,备注修改信息
container_id
: 被修改容器的id
new_image_name
: 新镜像的名字,可自定义
tag_name
: 新镜像的标签,可不写(不写默认为latest)