zoukankan      html  css  js  c++  java
  • 系统综合实践-第一次作业

    (1)课程调查

    • 进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。

    应该是一门对于一些新东西的应用,以为和操作系统或者系统结构有所关联,没想到是与微服务相联,而且这个课要我们写博客,这让我不禁想起了软工,把害怕打在公屏上。不过呢,对于这个Docker也是有所听闻,却一直没有时间去学习,能有一个机会去学习也是非常不错的。

    (2)了解微服务

    • 第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
    • 定义:

    微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。简而言之,微服务(Microservices)架构把一个庞大的application拆成几个小的独立的服务,再把独立的服务串起来。

    • 特点:

    单一职责:对于每个服务而言,在服务架构层面遵循单一职责原则。符合高内聚、低耦合,不同的服务通过“管道”的方式灵活组合,从而构建出庞大的系统。

    轻量级通信:服务之间应通过轻量级的通信机制,实现彼此间的互通互联,相互协作。所谓轻量级通信机制,通常指语言无关、平台无关的交互方式。对于微服务而言,通过使用轻量级通信机制,使服务与服务之间的协作变得更加标准化,也就意味着在保持服务外部通信机制轻量级的情况下,团队可以选择更适合的语言、工具或者平台来开发服务本身。

    独立性:在单块架构中,功能的开发、测试、构建以及部署耦合度较高,相互影响。而在微服务架构中,每个服务都是一个独立的业务单元,当对某个服务进行改变时,对其它服务不会产生影响。无论是从开发、测试还是部署这些阶段来看,服务与服务之间都是高度解耦的。

    进程隔离:所有的功能都运行在同一个进程中,就意味着,当对应用进行部署时,必须停掉当前正在运行的应用,部署完成后,再重新启动进程,无法做到独立部署。但在微服务架构中,应用程序由多个服务组成,每个服务都是一个具有高度自治的独立业务实体。通常情况下,每个服务都能运行在一个独立的操作系统进程中,这就意味着,不同的服务能非常容易地被部署到不同的主机上。

    • 优点:

    开发简单,集中式管理
    基本不会重复开发
    功能都在本地,没有分布式的管理和调用消耗

    • 缺点:

    容器技术不够成熟、不够安全,因为容器彼此共享了主机的OS内核
    分布式系统可能复杂难以管理,并且分布部署导致跟踪问题难
    拓展性不足

    • 部署:

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

    (3)学习docker技术

    • Docker:

    一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可 以实现虚拟化。
    Docker 包括三个基本概念:
    镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、暂停等。
    仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像

    • Docker Compose:

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。
    通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

    • Dockerfile:

    一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

    • docker machine:

    允许你在虚拟宿主机上安装Docker,并使用docker-machine命令管理这个宿主机的工具

    • Swarm:

    Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。

    • K8s:

    是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。

    (4)搭建自己的docker环境

    • 环境:

    该实践使用的环境是ubuntu1.8.04

    • Ubuntu Docker 安装:
    • 卸载旧版本():

    $ sudo apt-get remove docker docker-engine docker.io containerd runc

    • 更新ubuntu的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 -

    • 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥

    $ sudo apt-key fingerprint 0EBFCD88

    • 使用以下指令设置稳定版仓库:

    $ 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:

    $ sudo apt-get install docker-ce docker-ce-cli containerd.io

    • 测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:

    $ sudo docker run hello-world

    这就安装Docker成功了;

    容器的操作

    • 输出hellowolrd:

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

    • 容器的创建:

    docker run -it ubuntu /bin/bash

    • 容器的查看:

    docker ps -a

    • 容器的启动(已经停止的):

    sudo docker start <容器 ID>

    • 容器的停止:

    $ docker stop <容器 ID>

    • 查看容器标准输出

    sudo docker logs [容器ID]

    • 删除容器

    $ docker rm -f 1e560fca3906

    仓库

    • 听了大佬的话,去用了一下阿里云的镜像仓库,先注册,并有仓库

    • 登入仓库

    • push镜像到仓库

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


    这就成功啦。

  • 相关阅读:
    CSS基本相关内容中秋特别奉献
    JavaScript基础
    jQuery(内涵: jquery选择器)
    ADO.NET(内涵效率问题)
    三层实例(内涵Sql CRUD)
    数据库的应用详解二
    三层相关案例(及常见的错误)
    Java中生成唯一ID的方法
    Postgres 的 Array 类型
    java的错误和异常的区别
  • 原文地址:https://www.cnblogs.com/cgh2333/p/12678044.html
Copyright © 2011-2022 走看看