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的镜像

  • 相关阅读:
    AttributeError: 'DatabaseFeatures' object has no attribute 'autocommits_when_autocommit_is_off'
    mac 添加adb环境变量
    ios环境搭建
    接口自动化测试平台介绍
    听风系统介绍
    nginx启动报错整理
    Mongodb: Sort operation used more than the maximum 33554432 bytes of RAM
    Mac上python 在终端使用pip3安装包报ConnectTimeoutError错误
    crontab -让服务器执行定时任务
    koajs项目之memcached实现session共享
  • 原文地址:https://www.cnblogs.com/Tinor/p/12706138.html
Copyright © 2011-2022 走看看