1.课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
答:开始以为是系统结构的实践课,还想着要实验箱,现在在家好像都没办法上课,后面自己查资料了才知道是微服务内容,偏向软件层面的。希望能学好。
2.了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
(1)微服务是什么
答:微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
(2)微服务特点
*按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
*每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
*微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
*微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
*单个微服务能够集群化部署,并且有负载均衡的能力
*整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
*整个微服务系统有链路追踪的能力。
*有一套完整的实时日志系统。
(3)微服务优点
*每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。
*微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
*微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
*微服务能使用不同的语言开发。
*微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
*微服务允许你利用融合最新技术。
*微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。
(4)微服务缺点
*微服务架构可能带来过多的操作。
*分布式系统可能复杂难以管理。
*当服务数量增加,管理复杂性增加。
(5)部署方式
*单主机多服务实例模式
*单虚拟机单服务实例
*单容器单服务实例
3.学习docker技术
(1)了解docker的相关概念
镜像:Docker镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker:Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0 协议开源,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
Docker Compose:是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Dockerfile:Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Docker Machine:是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。
Swarm:Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
k8s:是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。
(2)搭建docker环境
卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新 apt 包索引。
$ sudo apt-get update
安装 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
通过运行 hello-world 映像来验证是否正确安装了Docker Engine-Community
$ sudo docker run hello-world
配置阿里云镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://v54081p6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
(3)容器的创建、删除、更新和查询
获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ sudo docker pull ubuntu
启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
参数说明:
-i: 交互式操作
-t: 终端
ubuntu: ubuntu 镜像
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是/bin/bash
要退出终端,直接输入exit
$ docker run -it ubuntu /bin/bash
查询所有的容器
$sudo docker ps -a
使用 docker start 启动一个已停止的容器:
$sudo docker start bb3b8e47a1f8
停止容器
$sudo docker stop bb3b8e47a1f8
更新容器
$ sudo docker container update --help
删除容器
$ sudo docker rm -f bb3b8e47a1f8
(4)创建并维护自己的镜像仓库
登录和退出docker hub
登录需要输入用户名和密码,登录成功后就可以从docker hub上拉取自己账号下的全部镜像。```
$ sudo docker login
$ sudo docker logout
创建仓库
拉取和上传镜像