2020系统综合实践 第1次实践作业

1.课程调查

在这两年半的学习中,我能感受到我们专业是软硬件兼修的,但是很少有软件硬件相结合的教学,因此,当我第一次看到这个课程名称的时候,我觉得这个课程应该就是培养我们的软硬件相结合的系统开发能力,大概感觉就是在硬件上编程,实现一些功能。在第一次课中,老师提到了树莓派,这证实了我之前的猜测,这是我一直期待的,也是我上大学前对这个专业所学内容的期望。

2.了解微服务

资料来源:知乎-华为技术宅基地

1.微服务是什么

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构造。

2.微服务的特点

3.微服务的优点

  • 提升开发交流,每个服务足够内聚,足够小,代码容易理解
  • 服务独立测试、部署、升级、发布
  • 按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上
  • 每个服务按需要选择HA的模式,选择接受服务的实例个数
  • 容易扩大开发团队,可以针对每个服务(service)组件开发团队
  • 提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪
  • 新技术的应用,系统不会被长期限制在某个技术栈上

4.微服务的缺点

  • 没有银弹,微服务提高了系统的复杂度
  • 开发人员要处理分布式系统的复杂性
  • 服务之间的分布式通信问题
  • 服务的注册与发现问题
  • 服务之间的分布式事务问题
  • 数据隔离再来的报表处理问题
  • 服务之间的分布式一致性问题
  • 服务管理的复杂性,服务的编排
  • 不同服务实例的管理

5.微服务的部署

  • 每台主机上部署多个服务实例
  • 每个主机一个服务实例
  • 无服务的部署
    详细资料

3.学习docker技术

学习资料来源:Docker教程 | 菜鸟教程 b站视频教学

1.docker的相关概念

  • docker:让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或windows 机器上,也可以实现虚拟化
  • docker compose:可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具
  • Dockerfile:在Docker中创建镜像最常用的方式,是一个Docker镜像的描述文件
  • docker machine:允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机的工具
  • Swarm:提供Docker容器集群服务,是Docker官方对容器云生态镜像支持的核心方案
  • k8s:开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等

2.搭建自己的docker环境

1.Ubuntu Docker 安装

设置仓库
更新 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"

安装 Docker Engine-Community
更新 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

2.镜像加速

b站教程
按照教程输入以下命令

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["阿里云给我的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

然后使用以下命令查看是否成功配置加速器

sudo docker info

在终端输出最后几行找到如下信息就表示配置成功

3.Docker 容器使用

先运行一个hello world

 sudo docker run ubuntu:15.10 /bin/echo "Hello world"

各个参数解析:

  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo "Hello world": 在启动的容器里执行的命令
    以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

运行交互式的容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

docker run -i -t ubuntu:15.10 /bin/bash

各个参数解析:

  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

输出的长串字符串是容器ID

查看正在运行的容器

sudo docker ps

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

sudo docker logs 1067331d70b6

停止容器
使用 docker stop 命令来停止容器:

sudo docker stop 1067331d70b6

启动已停止运行的容器
查看所有的容器命令如下:

$ docker ps -a

使用 docker start 启动一个已停止的容器:

$ docker start 容器ID 

后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以通过 -d 指定容器的运行模式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach :退出容器终端会导致容器停止。
  • docker exec:推荐使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
    以docker exec命令为例
docker exec -it 1067331d70b6 /bin/bash

导出容器

$ docker export 1067331d70b6 > ubuntu.tar

导出容器 1067331d70b6 快照到本地文件 ubuntu.tar。

导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1

$ cat ~/ubuntu.tar | docker import - test/ubuntu:v1

删除容器

$ docker rm -f 容器ID

4.Docker 镜像使用

列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像。

获取一个新的镜像

docker pull ubuntu:13.10

查找镜像
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search httpd

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

拖取镜像

docker pull 镜像名

以拖取httpd 官方版本的镜像为例

删除镜像

docker rmi 镜像名

以删除hello-world镜像为例

更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。

docker run -t -i ubuntu:15.10 /bin/bash

在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。

通过命令 docker commit 来提交容器副本。

docker commit -m="has update" -a="tinor" e6ea5f605966 tinor/ubuntu:v2

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • e6ea5f605966:容器 ID
  • tinor/ubuntu:v2: 指定要创建的目标镜像名

使用 docker images 命令来查看我们的新镜像 tinor/ubuntu:v2:

使用我们的新镜像 tinor/ubuntu 来启动一个容器

docker run -t -i tinor/ubuntu:v2 /bin/bash 

5.Docker 仓库管理

创建一个阿里云镜像仓库

在docker里登入阿里云

从Registry中拉取镜像

sudo docker pull registry.cn-hangzhou.aliyuncs.com/fzu/tinor:[镜像版本号]

复制镜像ID并设置tag

sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/fzu/tinor:[镜像版本号]

将镜像推送到Registry

sudo docker push registry.cn-hangzhou.aliyuncs.com/fzu/tinor:[镜像版本号]


阿里云仓库可以看到刚刚push的镜像

posted @ 2020-04-15 23:07  Tinor_yu  阅读(194)  评论(0编辑  收藏  举报