zoukankan      html  css  js  c++  java
  • 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的镜像

  • 相关阅读:
    Angular Universal 学习笔记
    SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
    Angular 服务器端渲染的学习笔记(二)
    Angular 服务器端渲染的学习笔记(一)
    第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成
    如何从 SAP Spartacus Product Detail 页面,找到其 Angular 实现 Component 的位置
    具备自动刷新功能的 SAP ABAP ALV 报表
    C++学习目录
    c--条件编译
    c--文件读写--二进制
  • 原文地址:https://www.cnblogs.com/Tinor/p/12706138.html
Copyright © 2011-2022 走看看