第一次实践作业
(1)课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
感觉和大多数人一样,在上课之前应该都不是很了解这个课程,只是知道这们课是时间方面的课程,学分在实践课种也算是比较多的了,在之前以为就是综合以前学习过的理论课程来做一个综合的实践,跟以往的实际课一样平常跟着老师做,最后考试完成,不过博客园班级二维码发下来我觉得这门课就没那么简单了……毕竟上学期不但有软工实践,还有SDN,两门课程属实是挺让人头大,所以希望这门课不会像以往那么困难吧,特别是不要像sdn那门课程一样到处都是晦涩难懂的概念,说真的那门课虽然结束了,但是我了解到的东西并不多,真正理解的内容也很少,而且一直停留在配置环境配置环境,希望这门课的东西可以更多地用在学习内容上(考研党强烈希望这门课不会那么耗时……),而不是环境的配置上面,并且在最后可以有所收获,并在以后的学习生涯中能够有所帮助。
(2)了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
-
维基百科上给出的定义是:微服务(Microservices)是一种软件开发技术,是面向服务的架构(Service-Oriented Architecture,SOA)的变体,微服务架构将应用程序组成一系列松散耦合的服务集合。在微服务体系结构中,服务是细粒度的,协议是轻量级的。微服务的本质在于分布式、去中心化。简单理解就是分解应用程序的功能,把一个大型服务拆分成很多小服务,使它们完全彼此独立,并且可以相互通信,拆分之后的微服务架构如下图所示。
-
微服务架构的特点:
1)针对特定服务发布,影响小,风险小,成本低
2)频繁发布版本,快速交付需求
3)低成本扩容,弹性伸缩,适应云环境 -
相较于传统的软件架构的优缺点
i.优点
1.每个服务足够内聚,足够小,代码容易理解这样能够聚焦一个指定的业务功能或业务需求。
2.开发简单,开发效率提高,一个服务可能就是专一的只干一件事情。
3.微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
4.微服务能够被小团队单独开发。
5.微服务能使用不同的语言开发。
6.易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins、Hudson、bamboo。
6.微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
7.微服务允许利用融合最新技术。
8.微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合。
9.每个微服务都有自己的存储能力,可以有自己的数据库,也可以统一数据库。
ii.缺点
1.开发人员要处理分布式系统的复杂性
2.多服务运维难度,随着服务的增加,运维的压力也在增大
3.系统部署依赖
4.服务间通讯成本
5.数据一致性
6.系统集成测试
7.性能监控 -
它是怎样部署的
1.一台主机部署多服务实例
2.每个主机一个服务实例
3.松耦合,可独立部署
(3)学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
1.docker的相关概念
-
docker:docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。
-
docker compose: 用于定义和运行多容器 Docker 应用程序的工具。
-
Dockerfile:是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
-
Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
-
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
-
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。
2.Ubuntu Docker安装
- 更新apt包索引
sudo apt-get update
在这个过程中出现了过程超级慢的情况,这是由于linux系统自带的镜像源都在国外,国内用户下载或更新软件会比较慢,有时是非常慢,所以国内某些机构,如大学,研究院所,就在国内建了linux的镜像源服务器供国内linux用户使用,详细可以参考该链接
设置完成后发现速度快了特别多,接下来就按照步骤来安装
- 安装 apt 依赖包,用于通过HTTPS来获取仓库
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
- 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 使用以下指令设置稳定版仓库
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
- 更新 apt 包索引
sudo apt-get update
- 安装最新版本的 Docker Engine-Community 和 containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 测试 Docker 是否安装成功
sudo docker run hello-world
在测试的时候刚开始出现了不能寻找到的情况,如下图,
接着我重新输入了一遍这段测试代码,发现成功了,,结果如下图
可见,Docker注册服务器从Docker Hub获取到最新的Hello World镜像,下载到了本地。可以再次运行Hello World镜像
3.容器的操作
-
输出helloworld
But接下来又遇到了问题,就是在演示hello world的时候一直出现以下的错误
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http:……
出现Docker镜像报错参考了以下的文章,记住vim前面最好加个sudo,掉进坑里了,一定时刻要记得sudo!
终于得到结果,如下图所示
成功输出hello world -
获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ docker pull ubuntu
-
启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器,进入交互界面:
$ docker run -it ubuntu /bin/bash
-
查看所有的容器:
$ docker ps -a
-
使用 docker start 启动一个已停止的容器:
$ docker start [id]
-
停止一个容器
停止容器的命令如下:
$ docker stop <容器ID>
停止和重启对应id的容器,在查看所有容器结果如下
-
删除容器
删除容器使用docker rm命令:
$ docker rm -f
-
在进入容器的时候家使用docker exec命令,因为此退出容器终端,不会导致容器的停止
镜像部分
-
列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像。
-
获取镜像。这里以httpt为例
sudo docker pull [需要的镜像]。
- 删除镜像
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:
$ docker rmi hello-world
发现直接删除镜像是不行的,所以应该先删除镜像创建的容器,如下
4.docker仓库管理
由于docker进不去,所以我用了之前注册的阿里云镜像,创建一个仓库
通过他的操作指南完成镜像的推送,可以看到仓库里已经有了这个镜像