zoukankan      html  css  js  c++  java
  • 第一次实践作业

    课程调查

    选课的时候看到课程名还以为是一门偏硬件的课,但是当听到需要写博客时,便感到事情没那么简单。依稀记得一门名为“软件工程实践”的课也要写博客,瞬间感受到了压力。在被软工捶打了一学期之后,在我的大脑中似乎已经将写博客和软工等价起来了。但是究竟有没软工那么可怕,还得先学一学再说。

    了解微服务

    微服务是什么

    微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。

    微服务的特点

    优点

    • 微服务最大的优点是,它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
    • 微服务应用程序的另一个好处是,它们更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。测试微服务应用程序仍然是必需的,但它更容易识别和隔离问题,从而加快开发速度并支持DevOps和持续应用程序开发。
    • 第三个好处是,微服务架构有助于新兴的云服务,如事件驱动计算。类似AWS Lambda这样的功能让开发人员能够编写代码处于休眠状态,直到应用程序事件触发。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。

    缺点

    • 微服务架构可能带来过多的操作。
    • 分布式系统可能复杂难以管理。
    • 当服务数量增加,管理复杂性增加。

    微服务的部署

    • 基于主机(物理机或虚机)的多服务实例
      该模式是最为传统的应用程序部署方法。在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服务实例。此模式有几种不同的实现形式,其中包括:将每一个服务实例都作为一个单独的进程,或是在同一进程中运行多个服务实例。
    • 基于主机(物理机或虚机)的服务实例
      该部署方法能够在对应的主机上单独地运行每一个实例,包括:基于单个虚拟机的服务实例和基于单个容器的服务实例。基于单个虚拟机的服务实例模式,能够将每个服务打包成为诸如Amazon EC2 AMI的虚拟机(VM)镜像,此处的实例就是指那些通过既有镜像运行起来的VM。目前,使用该模式的一个典型应用便是Netflix的视频流服务。
    • 基于容器的服务实例
      常见的容器技术包括Docker和Solaris Zones。在这种部署模式下,每个服务实例都运行在其各自的容器中,因此也被称为操作系统级别的虚拟化机制。要使用该模式,需要将服务打包成为一个文件系统类型的镜像(通常称为容器镜像),其中包含执行该服务所需的应用程序、及其库文件。在完成打包之后,需要启动一到多个容器,并在物理机或虚拟机上运行它们。可以选择使用诸如Kubernetes或Marathon之类的集群管理器来管理多个容器。
    • 无服务器部署
      无服务器部署技术能够支持Java、Node.js和Python服务,AWS Lambda是全球开发人员使用最多的无服务技术。在该部署模式下,需要将服务打包成为一个ZIP文件,然后将其上传到Lambda函数(即一种无状态服务)中。同时需要提供各种元数据,这些元数据带有在处理请求时所调用到的不同函数名称。Lambda函数需要自动运行足够多的微服务实例,以处理不同的请求。而作为用户,只需根据所花费的时间、以及消耗的内存,为每个请求支付费用便可。

    学习docker技术

    docker的相关概念

    • Docker:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。一个完整的Docker由以下几个部分组成:Docker Client客户端、Docker Daemon守护进程、Docker Image镜像、Docker Container容器。
    • Images:镜像,当我们从远程仓库下载软件后会存放到本地仓库,这个本地仓库就是images,可以使用docker images查看本地安装了哪些软件。
    • Container:容器,是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。要有Container需要先有images,image就相当于抽象的类,Container就相当于具体实例化的对象。可通过Docker API或者CLI命令来启停、移动、删除容器。
    • Docker Compose:Docker官方的开源项目,使用Python编写,负责实现Docker容器集群的快速编排,实现上调用了Docker服务的API进行容器管理。
    • Dockerfile:用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。
    • Docker Machine:Docker官方提供的一个工具,它可以帮助我们在远程的机器上安装Docker,或者在虚拟机host上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过docker-machine命令来管理这些虚拟机和Docker。
    • Swarm:Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。
    • k8s:是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在k8s中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

    搭建docker环境

    • 系统版本
      Ubuntu 16.04

    • 卸载旧版本
      Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
      $ sudo apt-get remove docker docker-engine docker.io containerd runc

    • 使用 Docker 仓库进行安装
      因为是首次安装 Docker Engine-Community ,所以需要设置 Docker 仓库。之后便可以从仓库安装和更新 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 -

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

        $ sudo apt-key fingerprint 0EBFCD88
                    pub   rsa4096 2017-02-22 [SCEA]
                    9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
                    uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
                    sub   rsa4096 2017-02-22 [S]
        
      • 使用以下指令设置稳定版仓库

        $ sudo add-apt-repository 
         "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
        $(lsb_release -cs) 
        stab"
        
    • 安装 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
      • 打印出以下信息说明安装成功

    容器

    获取镜像

    • 如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
      $ docker pull ubuntu

    启动容器

    • $ docker run -it ubuntu /bin/bash

    • 参数说明:
      -i: 交互式操作。
      -t: 终端。
      ubuntu: ubuntu 镜像。
      /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

    • 退出终端,输入exit

    启动已停止运行的容器

    • 查看所有的容器
      $ docker ps -a

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

    后台运行

    • 在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
      $ docker run -itd --name ubuntu-test ubuntu /bin/bash

    停止一个容器

    • 停止容器的命令如下:
      $ docker stop <容器 ID>

    • 停止的容器可以通过 docker restart 重启:
      $ docker restart <容器 ID>

    进入容器

    • docker exec -it 243c32535da7 /bin/bash

    删除容器

    • $ docker rm -f $ docker rm -f f79bc2927eec

    镜像

    列出镜像列表

    • docker images

    • 各个选项说明:
      REPOSITORY:表示镜像的仓库源
      TAG:镜像的标签
      IMAGE ID:镜像ID
      CREATED:镜像创建时间
      SIZE:镜像大小

    获取一个新的镜像

    • docker pull 镜像名称

    查找镜像

    • 使用 docker search 镜像名称 来搜索镜像

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

    拖取镜像

    • 使用命令 docker pull 镜像名称 来下载镜像

    • 使用这个镜像

    删除镜像

    • 使用docker rmi 镜像名称 来删除镜像,以删除镜像hello-world为例

    创建镜像

    • 更新镜像

      • 更新镜像之前,我们需要使用镜像来创建一个容器。在运行的容器内使用 apt-get update 命令进行更新。

      • 在完成操作之后,输入 exit 命令来退出这个容器。

      • 此时 ID 为 e97d1c55ff58c 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

      • 使用新镜像 runoob/ubuntu 来启动一个容器

    • 构建镜像

      • 使用命令 docker build , 从零开始来创建一个新的镜像。为此,先要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建镜像。下面是建好的名为Dockerfile的文件:

      • 使用cat命令在终端查看Dockerfile这个文件:

      • 然后,使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像:

      • 使用docker images 来查看创建的镜像,其已经在列表中存在,镜像ID为5b3b664946b4

      • 使用新的镜像来创建容器:

      • 设置镜像标签
        使用 docker tag 命令,为镜像添加一个新的标签:

        docker tag 镜像ID,这里是 5b3b664946b4 ,用户名称、镜像源名(repository name)和新的标签名(tag)。使用 docker images 命令可以看到,ID为5b3b664946b4的镜像多一个标签:

    创建并维护自己的镜像仓库

    • 这里遇到一个问题,使用docker login 登录时一直登录不上,账号密码检查了很多遍都没问题,但就是登不上。在网上试了各种方法后,还是不行。只能先放这里了。

    • 过了一两天又来试,终于登上了,所有把下面的补齐:

    • 登录docker

      $ docker login

    • 推送镜像

      注:我的docker用户名是isweng,下面以推送镜像ubuntu:16.04到我的docker仓库为例。

      $ docker tag ubuntu:16.04 isweng/ubuntu:18.04
      $ docker image ls
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      runoob/centos       6.7                 5b3b664946b4        2 days ago          191MB
      runoob/centos       dev                 5b3b664946b4        2 days ago          191MB
      runoob/ubuntu       v2                  aa19460c1a95        3 days ago          137MB
      httpd               latest              bdc169d27d36        4 days ago          166MB
      alpine              latest              a187dde48cd2        3 weeks ago         5.6MB
      ubuntu              latest              4e5021d210f6        4 weeks ago         64.2MB
      ubuntu              16.04               77be327e4b63        8 weeks ago         124MB
      hello-world         latest              bf756fb1ae65        3 months ago        13.3kB
      centos              6.7                 9f1de3c6ad53        13 months ago       191MB
      ubuntu              15.10               9b9cb95443b5        3 years ago         137MB
      ubuntu              13.10               7f020f7bf345        5 years ago         185MB
      $ docker push isweng/ubuntu:16.04
      $ docker search isweng/ubuntu
      NAME                DESCRIPTION         STARS               OFFICIAL         AUTOMATED
      

      注:这里执行docker search isweng/ubuntu 没有结果,上网查了原因,说是有可能是因为排名太低搜不到。

      但是上传是成功了,在我的docker 仓库可以看到这个镜像:

  • 相关阅读:
    JavaScript基础知识
    font属性+ul列表+table属性+border属性
    一级段项目学习
    考点整理代码块系列
    考试点总结
    JavaScript复习
    1017
    复习HTML
    1012总结
    1011js学习总结
  • 原文地址:https://www.cnblogs.com/ZKweng/p/12719515.html
Copyright © 2011-2022 走看看