系统实践第一次作业

实验一

  1. 在课程开始前,你是否了解过微服务或者docker?
      完全陌生

  1. 查找资料回答,用自己的话回答下列问题:

    • 微服务是什么,相较于传统的软件架构,它有什么优缺点,它是怎样部署的?
        与微服务相对的是单体式应用程序(Monolithic application),简而言之就是把所有需要的服务都放到一个程序里面,这固然是我们熟悉的方式。但是当系统达到一定规模的时候,这种方式由于程序里面放了很多服务,并且各个服务之间有着密切的联系,这就导致了当我们想要拓展或者维护某一个服务的时候,往往还要考虑这次的改动会不会对其他服务产生影响,这样就大大提高了后期拓展和维护的难度。那么,针对这样的情况,就有了微服务的概念。

      2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现 。「维基百科」

        因此,就个人理解,微服务就是化整为零,让各个服务自己管理好自己,不管你这个服务怎么实现的,用什么语言,用什么数据库,统统不管,只要你这个服务提供我想要的服务就好。还有在程序部署过程中,对于环境的配置工作大大降低,只需要将镜像打包上传,需要时拉取一份即可。

        补充

        一般我们写程序的,能接触到好几个环境:
        - 自己写代码的环境叫做开发环境。
        - 给测试去跑的环境叫做测试环境。
        - 测试完可以对外使用的叫做生产环境。

        微服务相较于传统架构,优点在于:
        1. 技术异构性:各个服务可以采用适合自己的内部开发技术,不用再受约束
        2. 可拓展性:很明显,对系统中影响性能的模块单独进行拓展升级比单体应用中对整体应用进行升级要简单和容易的多
        3. 部署方便:在一个单块系统中,只要修改了一行代码,就需要对整个系统进行重新的构建、测试,然后将整个系统进行部署。而微服务则可以对一个微服务进行部署这样带来的一个好处是,我们可以更频繁的去更改我们的软件,通过很低的集成成本,快速的发布新的功能

        不足的地方在于:
        1. 复杂度高:对于微服务间的事务性操作,因为不同的微服务采用了不同的数据库,将无法利用数据库本身的事务机制保证一致性
        2. 运维复杂:在采用微服务架构时,系统由多个独立运行的微服务构成,需要一个设计良好的监控系统对各个微服务的运行状态进行监控。运维人员需要对系统有细致的了解才对够更好的运维系统。

    • 具体到docker,什么是 docker 镜像,什么是 docker 容器,二者的关系是什么?

     What is a container image?
       When running a container, it uses an isolated filesystem. This custom filesystem is provided by a container image. Since the image contains the container’s filesystem, it must contain everything needed to run an application - all dependencies, configuration, scripts, binaries, etc. The image also contains other configuration for the container, such as environment variables, a default command to run, and other metadata. 「docker 官网」

     What is a container?
       Simply put, a container is simply another process on your machine that has been isolated from all other processes on the host machine. That isolation leverages kernel namespaces and cgroups, features that have been in Linux for a long time. Docker has worked to make these capabilities approachable and easy to use. 「docker 官网」

      根据上面官方的解释可以看出来,所谓镜像和装系统时的镜像类似,它把运行所需要的所有东西准备好,当你要使用环境的时候,把镜像装入容器就可以使用了,不用自己配置任何东西。就像镜像类似于代码,光有代码没有用,我们要的是跑起来的程序,而容器就类似于跑起来的程序


  1. 搭建你自己的 docker 环境,系统环境推荐使用 Ubuntu 16.04 LTS,有条件的同学请直接装双系统,完成 docker 的基本入门。友情提示:如果选择使用 Docker Desktop on Windows,需要 Windows 专业版以上,并且你电脑安装的 VisualBox 虚拟机将无法使用。
    1)整理一个 docker 安装的 shell 脚本,完成安装;
      阿里云安装脚本
      curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

2)从 docker hub 上任意拉取一个镜像,操作镜像的查询和删除,也可使用其他容器仓库,例如阿里;
  拉取命令docker pull ubuntu
  查询命令docker images
  删除命令docker rmi 镜像名






3)用2)的镜像启动一个容器,操作容器的查询、修改和删除;
  启动容器命令docker run -it -d --name 容器命名 -p 8088:80 镜像名
  进入容器修改镜像命令docker exec -it 镜像ID \bin\bash
  容器停止/删除命令docker stop 容器ID









4)创建并维护自己的镜像仓库,实现拉取和上传镜像等。
  先在 docker hub 上注册账号,并创建仓库。再输入docker login命令,按提示登录。
  将本地镜像的 tag 改为标准上传格式 用户名/仓库名:
命令为docker tag 本地仓库名/本地镜像tag 用户名/仓库名:新命名的镜像名字
  最后上传即可,命令为docker push 用户名/仓库名:新命名的镜像名字
  从仓库 pull 镜像的命令为docker pull 用户名/仓库名:镜像名字







  1. 回答问题:完成上述内容后,你认为本次作业的难度如何?
      适中

进阶

  1. 解决 Docker 镜像下载慢的问题;
      切换为国内源
  2. 解决 Docker 安装后每次都需要sudo权限运行的问题;
      CSDN 给现在的账户添加docker权限
  3. 除了 Docker Hub,尝试在其他国内平台(例如阿里云)建立并维护自己的镜像仓库;
  4. 针对本次实践任务中遇到的各类问题和解决办法进行总结(不少于3条)
    • 对 Linux 命令比较生疏,包括 Docker 的命令没有接触过,解决办法也挺简单的,先百度,再多敲几次就好了,或者在命令行利用 docker command --help 命令查看
    • 一开始不能理解 Docker 的作用,看某些博客也挺难懂的,解决办法就多看几篇博客,综合起来看。往往那些通过生活实际例子去解释的博客更容易让人懂,所以也提醒了自己,写博客尽量让没有基础的人也能看懂,不要堆一些晦涩难懂的名词
    • 对于 Docker 的入门使用,最好的自然是官方文档,但是官方文档是英文写的,想想就会抵触。但是计算机专业必定是要读很多英文资料的,所以首先要克服对英文的恐惧,逼着自己去看英文资料,习惯之后应该就好了

参考资料

【官方文档】Docker doc
【知乎】为什么需要 Docker?

posted @ 2021-03-30 12:58  物转星移几度秋  阅读(91)  评论(0)    收藏  举报