一、课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
- 个人感觉吧,实践课可能会比理论课更加有趣些,毕竟自己动手的参与感比硬学习理论学习更加有趣吧。也希望通过这门课,能够学习到更加有趣也更加实用的技术吧。希望能不断学习,不断进步吧。
- 有一说一,还是有点害怕写Blog的。让我想到了,被软工支配的恐惧感。
二、了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
-
微服务是什么?
- 维基百科:微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。
- 百度:微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
- 据我个人理解,就是把复杂的问题细分化。使大型程序不至于太过于笨重庞大。
-
微服务特点
- 针对特定服务发布,影响小,风险小,成本低
- 频繁发布版本,快速交付需求
- 低成本扩容,弹性伸缩,适应云环境
-
微服务优点
- 提升开发交流,每个服务足够内聚,足够小,代码容易理解;
- 服务独立测试、部署、升级、发布;
- 按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
- 需要选择HA的模式,选择接受服务的实例个数;
- 容易扩大开发团队,可以针对每个服务(service)组件开发团队;
- 提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;
- 新技术的应用,系统不会被长期限制在某个技术栈上;
-
微服务缺点
- 没有银弹,微服务提高了系统的复杂度;
- 开发人员要处理分布式系统的复杂性;
- 服务之间的分布式通信问题;
- 服务的注册与发现问题;
- 服务之间的分布式事务问题;
- 数据隔离再来的报表处理问题;
- 服务之间的分布式一致性问题;
- 服务管理的复杂性,服务的编排;
- 不同服务实例的管理;
-
部署
- 基于主机(物理机或虚机)的多服务实例
- 基于主机(物理机或虚机)的服务实例
- 基于容器的服务实例
- 无服务器部署
三、学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:
学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
搭建你自己的docker环境,系统环境不限(主流的有Ubuntu/CentOS/Debian/Windows/MacOS等),完成docker的基本入门,包括但不限于:容器的创建、删除、更新和查询,创建并维护自己的镜像仓库,实现拉取和上传镜像等。
docker仓库链接:docker hub
参考资料:Docker Documentation;Docker教程 | 菜鸟教程
Docker概念
- Docker:Docker是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- 镜像:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库:仓库可看着一个代码控制中心,用来保存镜像。
- docker compose:Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
- Dockerfile:在Docker中创建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
- Docker Machine:Docker Machine是一个工具,它允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,可以使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上创建docker。使用docker-machine命令,可以启动、审查、停止、重启托管的docker 也可以升级Docker客户端和守护程序并配置docker客户端和宿主机通信。Docker Machine 也可以集中管理所以得docker主机。
- Swarm:Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
- k8s:Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
Docker的安装
-
使用环境:ubuntu~18.04
-
更新ubuntu的apt源索引
sudo apt-get update
-
安装包允许apt通过HTTPS使用仓库
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
-
添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
设置Docker稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
添加仓库后,更新apt源索引
sudo apt-get update
-
安装最新版Docker CE(社区版)
sudo apt-get install docker-ce
-
检查Docker CE是否安装正确
sudo docker run hello-world
如图所示,表示已经安装成功
Docker的基本操作
-
查看Docker Hub上的Ubuntu
-
从Docker Hub仓库,pull ubuntu镜像至本地
-
查看本地镜像有什么
-
创建容器并使用容器
-
查看当前正在运行的容器
-
容器的删除
-
将容器重新打包成新镜像
-
登录Docker Hub
-
上传镜像到Docker Hub
-
上传成功
四、小结
- 感觉最开始接触Docker比较陌生吧,然后通过参考一些Blog,官方文档以及B站视频。对Docker有了一些初步了解。感觉Docker类似于轻量级的虚拟机,方便实用。镜像类似于面向对象的类,而容器类似于面向对象的实例。Docker Hub和Git Hub感觉功能也是类似的。
- 有一说一,push到Docker Hub仓库的时候,有一点点小小的坑。没注意,让我花了一点时间在上面的。还有有些镜像源在国外,也是弄了蛮久的时间。希望以后能少踩点坑吧。怕了哦。