第1次实践作业

一、课程调查

看到名称,就感到这是一门综合性较强的课程,可能需要一些硬件相关的知识并且进行动手操作,感觉会有一定的难度并且需要花费不少的时间来进行学习。了解了课程的教授内容后,觉得是比较有意思的,希望自己能够学好这门课,在学习的过程中有所收获,并能将这些知识在以后有机会运用到实际当中去。

二、了解微服务

1.微服务是什么

微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。总结来说,微服务架构是将复杂臃肿的单体应用进行细粒度的服务化拆分,每个拆分出来的服务各自独立打包部署,并交由小团队进行开发和运维,从而极大地提高了应用交付的效率,并被各大互联网公司所普遍采用。


2.微服务的特点

  • 每个微服务粒度小,并且每个微服务都有自己独立的基本组件,例如数据库、缓存等,能够独立被部署并运行在一个进程内。
  • 系统相比较复杂单体应用更为简洁轻量化,每个微服务因为独立部署,可以使用不同跨语言编写,这样使得微服务架构更为灵活。
  • 具有低耦合性,不同模块间依赖低,相互关联小。
  • 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
  • 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。

3.微服务的优缺点

优点

  • 每个服务足够内聚,足够小,代码容易理解这样能够聚焦一个指定的业务功能或业务需求。
  • 开发简单,开发效率提高,一个服务可能就是专一的只干一件事情。
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
  • 微服务能够被小团队单独开发。
  • 微服务能使用不同的语言开发。
  • 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins、Hudson、bamboo。
  • 微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。- 微服务允许你利用融合最新技术。
  • 微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合。
  • 每个微服务都有自己的存储能力,可以有自己的数据库,也可以统一数据库。

缺点

  • 开发人员要处理分布式系统的复杂性,服务配置繁琐。
  • 多服务运维难度,随着服务的增加,运维的压力也在增大。
  • 某些服务可能造成属性能瓶颈,某些服务的宕机可能导致很多服务受影响。
  • 服务的可用性和维护性高度依赖于服务治理,如果治理得不好将会是灾难。

4.微服务的部署

  • 基于主机(物理机或虚机)的多服务实例
  • 基于主机(物理机或虚机)的服务实例
  • 基于容器的服务实例
  • 无服务器部署

三、学习docker技术

1.docker的相关概念

  • docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。
  • docker compose:Docker Compose是用于定义和运行多容器 Docker应用程序的工具,实际就是一个yml批处理文件,用来管理多个容器。
  • Dockerfile:Dockerfile是docker中镜像文件的的描述文件。它可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。
  • docker machine:Docker Machine可以用来批量安装docker、配置管理docker远程主机,而主机可以是物理机、虚拟机,甚至是云主机。Docker Machine像docker一样也提供了丰富的命令。
  • Swarm:Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。
  • k8s:是一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在k8s中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

2.搭建docker环境

①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 -

  • 通过搜索指纹的后8个字符,验证现在是否拥有带有指纹的密钥。
sudo apt-key fingerprint 0EBFCD88

  • 设置稳定版仓库
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
  • 验证安装是否成功
sudo docker run hello-world

如图所示,显示Docker安装成功。

②容器的使用

  • 载入镜像
sudo docker pull ubuntu

  • 创建一个容器
sudo docker run -it ubuntu /bin/bash

  • 退出容器
exit
  • 启动容器(后台模式)
sudo docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello; sleep 1; done

输出则是一串长字符,这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

  • 查询所有容器
sudo docker ps -a

  • 查看容器的元数据
sudo docker inspect <容器ID>

  • 实时查看docker容器日志
sudo docker logs <容器ID>

  • 更新容器(我选择更新其中一个容器为cpu-shares=512)
docker update --cpu-shares 512 <容器ID>

  • 停止容器
sudo docker stop <容器ID>

可以看到此时容器4c40dc165ca9未出现在运行的列表里。

  • 重启容器
sudo docker restart <容器ID>

可以看到此时容器4c40dc165ca9重新出现在运行的列表里。

  • 删除容器
sudo docker rm -f <容器ID>

可以看到容器4c40dc165ca9已被删除。

③镜像的使用

  • 搜索镜像
sudo docker search httpd

  • 下载镜像
sudo docker pull httpd

  • 删除镜像
sudo docker rmi hello-world

  • 登录镜像仓库
sudo docker login

  • 标记镜像
sudo docker tag ubuntu solareye/ubu
  • 上传镜像到仓库
sudo docker push solareye/ubu

可以看到push成功。

  • 获取镜像
sudo docker pull solareye/ubu

可以看到获取成功。

posted @ 2020-04-16 14:16  laika  阅读(286)  评论(0编辑  收藏  举报