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


    1.课程调查

    上学期选课的时候看到这门课的时候,以为是一门纯硬件的课程,跑跑流水灯交通灯这种感觉。第一节课听到老师介绍的时候提到了上学期的软件工程我就有点害怕,也用了同样的博客体系,下意识的祈祷这不会是一门非常耗时的课(毕竟我准备去考研)。老师提到了这门课分为三个部分,docker,树莓派和最后的综合大作业,个人还是比较期待的,docker和树莓派在之前就听说过,觉得蛮酷的,这次终于可以自己体验一把了。老师给我们提供了几个学习链接就让我们自己折腾了,个人不是非常习惯这种放养式教育,又要走出自己的舒适区了,冲冲冲。

    2.了解微服务

    1.微服务是什么

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

    2.微服务的特点

    • 力度小,且专注于做一件事
    • 单独的进程
    • 轻量级通信机制,通常是HTTP/REST接口
    • 松耦合,可独立部署

    3.微服务的优点

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

    4.微服务的缺点

    • 没有银弹,微服务提高了系统的复杂度

    • 开发人员要处理分布式系统的复杂性

    • 服务之间的分布式通信问题

    • 服务的注册与发现问题

    • 服务之间的分布式事务问题

    • 数据隔离再来的报表处理问题

    • 服务之间的分布式一致性问题

    • 服务管理的复杂性,服务的编排

    • 不同服务实例的管理

    5.微服务的部署

    • 一台主机部署多服务实例
    • 每个主机一个服务实例
    • 每台容器一个服务实例
    • 松耦合,可独立部署

    3.学习docker技术

    1.docker的相关概念

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

    2.搭建自己的docker环境

    本次作业采取的环境是ubuntu 18.04 LTS

    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"
    

    更新 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
    

    至此,docker终于安装完成了

    2.镜像加速

    在b站上看一个老师讲解docker的时候,说从dockerhub拉取镜像的时候,会比较慢,最好整一个加速,当时它是用阿里云做演示的,所以我也模仿了一下
    先是注册一个阿里云账号https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    然后获取到自己的阿里云加速地址

    配置镜像加速器,您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

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

    3.容器的使用

    这是菜鸟驿站里面的一个案例,跟着教程一步一步做让我对docker的操作有了初步的印象
    使用 docker run 命令来在容器内运行一个应用程序,这里先检查了一下本机的镜像,发现不存在,就去镜像仓库上下载镜像,然后创建了一个容器,在容器里执行 bin/echo "Hello world"并输出结果

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

    运行交互式的容器,我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力,-t: 在新容器内指定一个伪终端或终端,-i: 允许你对容器内的标准输入 (STDIN) 进行交互,可以通过exit来退出容器

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

    创建一个以进程方式运行的容器,与上面一种方式不同,它工作在后台,输出结果是容器id的完整版

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

    查看正在运行的容器

    docker ps
    

    使用容器的id来查看容器的标准输出

    Docker logs 7a3aa39a4291
    

    使用 docker stop 命令来停止容器,再次查看正在运行的容器时,未发现刚刚那个id

    docker stop 7a3aa39a4291
    

    以进程的方式启动容器时,使用attach的方式可以进入容器

    docker attach 1e560fca3906 
    

    这里有两种方式,一种是exit,一种是exec,其差别是前者在退出容器时会导致容器的停止,后者不会

    docker exec -it 3dd2895db7ed /bin/bash
    

    导出与导入容器

    docker export 3dd2895db7ed > ubuntu.tar
    cat ubuntu.tar | docker import - test/ubuntu:v1
    

    删除容器

    docker rm -f 3dd2895db7ed
    

    4.镜像的使用

    使用 docker search 命令来搜索镜像

    docker search httpd
    

    使用 docker pull 命令来下载镜像

    docker pull httpd
    

    删除镜像,首先停止所有的container,然后删除容器,最后删除指定镜像

    docker stop $(docker ps -a -q)
    docker rm $(docker ps -a -q)
    docker rmi hello-world
    

    更新镜像,首先创建一个容器,使用 apt-get update 命令进行更新,退出容器后使用docker commit 来提交容器副本

    docker run -t -i ubuntu:15.10 /bin/bash
    apt-get update
    

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

    docker commit -m="has update" -a="runoob" 5a230ff0a626 runoob/ubuntu:v2
    

    创建容器,即完成容器的更新

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

    查询容器信息

    docker inspect be5bdc4f013c
    

    5.仓库管理

    由于docker hub太慢了所以我选择阿里云镜像
    首先在阿里云里面建立一个公开的仓库

    然后再docker里登入阿里云

    sudo docker login --username=郑裕恒 registry.cn-hangzhou.aliyuncs.com
    

    从Registry中拉取镜像

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

    将镜像推送到Registry

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

    然后可以在阿里云上看到已经成功啦

  • 相关阅读:
    ASP.NET Cache的一些总结分享
    C#中委托和事件的区别实例解析
    [hdu2544]最短路spfa
    [codeforces274b]Zero Tree(树形dp)
    [poj2151]Check the difficulty of problems概率dp
    [poj3071]football概率dp
    [poj3744]Scout YYF I(概率dp+矩阵快速幂)
    [bzoj2440]完全平方数(二分+mobius反演)
    [xdoj1216]子树第k小(dfs序+主席树)
    [xdoj1233]Glory and LCS
  • 原文地址:https://www.cnblogs.com/dyssl/p/12683565.html
Copyright © 2020-2023  润新知