第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相关命令 参考