第1次实践作业

(1)课程调查

刚开始看到这门课的名字的时候以为这是一门偏硬件的课程,甚至以为是系统结构的配套实验,但是上了第一节课以后才发现跟想象中的完全不一样,要学习docker和树莓派,所以希望这门课能够让我在实践中加深对计算机系统的了解,并且不用占用太多课余的时间吧。


(2)了解微服务

微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。微服务

特点:

每个微服务都可以运行在自己的进程里;一系列独立运行的微服务共同构建起了整个系统;每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如订单管理,用户管理等;微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用

优点:

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

缺点:

  • 开发的问题:所有东西都在一个project,project编译构建可能要一两个小时,对做持续整合和持续部署的效率是伤害。
  • 扩展的问题:流量负载加大时,应对措施只能扩展整个app,机器资源利率很糟。比如:A元件吃cpu,B元件吃io,但是他们绑在一起,在跑A元件的时候,cpu很忙,而io和memory很闲,硬件资源的使用率就很浪费糟。

怎样部署:

Docker(一种开放源代码引擎,可让开发人员和系统管理员在Linux环境中部署自给自足的应用程序容器)提供了一种很好的方式来部署微服务以满足上述要求。 涉及的关键步骤如下:

  • 将微服务打包为(Docker)容器映像。
  • 将每个服务实例部署为一个容器。
  • 缩放是根据更改容器实例的数量完成的。
  • 随着我们使用Docker容器,构建,部署和启动微服务的速度将大大提高(比常规VM快得多)

(3)学习docker技术

docker的相关概念

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  • Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
  • Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
  • Docker Machine 是一种可以在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
  • Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 - Swarm 轻松地扩展到多个主机。
  • Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

搭建自己的docker环境

1.Ubuntu Docker 安装

1.1设置仓库

更新 apt 包索引

安装 apt 依赖包,用于通过HTTPS来获取仓库:

添加 Docker 的官方 GPG 密钥:

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

1.2安装 Docker Engine-Community

安装最新版本的 Docker Engine-Community 和 containerd

测试 Docker 是否安装成功


2.Docker Hello World

2.1Docker Hello World

使用 docker run 命令来在容器内运行一个应用程序

2.2运行交互式的容器

2.3启动容器(后台模式)


确认容器有在运行,可以通过 docker ps 来查看:


在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

2.4停止容器


3.Docker 容器使用

3.1获取镜像

使用 docker pull 命令来载入 ubuntu 镜像:

3.2启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

3.3启动已停止运行的容器

查看所有的容器命令如下:

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

3.4后台运行

3.5停止一个容器


停止的容器可以通过 docker restart 重启:

3.6进入容器


使用 docker exec 命令从这个容器退出,不会导致容器的停止

3.7导出和导入容器

导出容器

导入容器快照

3.8删除容器


4.Docker 仓库管理

4.1登录和退出


4.2拉取镜像

4.2推送镜像



第一次还是超时了...于是再试了一次

成功~

(4)总结

1.在拉取镜像的时候出现TSL超时错误

查找资料发现原因是国内从 DockerHub 拉取镜像有时会遇到困难,尝试配置镜像加速器,在/etc/docker/daemon.json (docker 的配置文件)中加入镜像地址,但是发现daemon.json权限是只读,于是通过ubuntu的命令sudo chmod修改权限为允许读写,然后保存配置文件,重启docker之后即可。

2.docker访问出现permission denied的错误

百度的原因是:docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。有两种解决方案:1.直接在docker命令前面加上sudo 2.将当前用户加入到docker用户组中,那当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令 参考

posted @ 2020-04-15 00:09  Lrrui  阅读(169)  评论(0编辑  收藏  举报