2020系统综合实践 第1次实践作业
(1)课程调查
在我看来,我一开始以为这门课是要我们去实验室,像微机接口一样做一下硬件实验。但是从第一节课开始说要用到博客园,而且还要用到虚拟机,这感觉跟我上学期的SDN课程有些类似。老师还有提到软件工程,希望不要像软件工程一样,不然就又要通宵熬夜了。
(2)了解微服务
微服务是什么
微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
微服务的特点
- 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
- 每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
- 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
- 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
- 单个微服务能够集群化部署,并且有负载均衡的能力
- 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
- 整个微服务系统有链路追踪的能力。
- 有一套完整的实时日志系统。
微服务的优点
- 易于开发和维护
- 启动较快
- 局部修改容易部署
- 技术栈不受限
- 按需伸缩
微服务的缺点
- 运维要求较高
- 分布式的复杂性
- 接口调整成本高
- 重复劳动
微服务的部署方法
- 基于主机(物理机或虚机)的多服务实例
- 基于主机(物理机或虚机)的服务实例
- 基于容器的服务实例
- 无服务器部署
(3)学习docker技术
docker的相关概念
镜像(Image)
镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库(Repository)
仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
docker
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
docker compose
docker compose可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
Dockerfile
Dockerfile是一个Docker镜像的描述文件,其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
docker machine
docker machine是一个工具,它允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机,可以使用Docker Machine在本地的MAC或者windows box、公司网络,数据中心或者AWS这样的云提供商上创建docker。
Swarm
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
k8s
k8s是基于容器的集群管理平台,它的全称,是kubernetes。
搭建docker环境
以下操作在虚拟机的Ubuntu内完成
- 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
sudo apt-get remove docker docker-engine docker-ce docker.io
- 更新apt包索引:
sudo apt-get update
- 安装以下包以使apt可以通过HTTPS使用存储库(repository):
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- 添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 使用下面的命令来设置stable存储库:
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 -y docker-ce
- 用经典的hello world来验证是否安装成功:
sudo docker run hello-world
docker的镜像加速
不使用镜像加速的docket的下载速度实在是慢得令人发指。
因此我使用阿里云得镜像加速器来加速。
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的镜像加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker的基本入门
由于使用docker需要一定的权限,所以我们使用下列指令进入管理员权限
sudo su
使用 docker run 命令来在容器内运行一个应用程序输出Hello world
docker run ubuntu:15.10 /bin/echo "Hello world"
运行交互式的容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
docker run -i -t ubuntu:15.10 /bin/bash
我们尝试在容器中运行命令 cat /proc/version查看当前系统的版本信息
cat /proc/version
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
可以通过 docker ps 来查看正在运行的容器:
使用 docker logs 命令,查看容器内的标准输出:
docker logs cd337cf2117c
停止容器
我们使用 docker stop 命令来停止容器:
docker stop cd337cf2117c
通过 docker ps 查看,容器已经停止工作:
查看所有的容器命令如下:
docker ps -a
使用 docker start 启动一个已停止的容器:
docker start cd337cf2117c
进入容器
attach 命令
下面演示了使用 docker attach 命令。
docker attach cd337cf2117c
exec 命令
下面演示了使用 docker exec 命令。
docker exec -it cd337cf2117c /bin/bash
通过 docker ps 查看,容器未停止工作:
导出导入容器
docker export cd337cf2117c > ubuntu.tar
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
删除容器
使用docker ps -a命令查看删除之前的所有容器
删除容器
docker rm -f cd337cf2117c
使用docker ps -a命令查看删除之后的所有容器
Docker 仓库管理
登录Docker账号
docker login
用tag命令为自己的仓库标签
docker tag ubuntu:15.10 lyhtsl/ubuntu:15.10
通过 docker push 命令将自己的镜像推送到 Docker Hub