一、课程调查
理想中的这门课按照字面上的理解,不再像以往一样是单纯的编程软件开发,而是从计算机系统方面出发对学过的知识进行综合运用。
对这门课的认识:从第一节课的内容来看,前期的学习微服务准备工作是针对一个完整的项目而言的,后续是需要应用上的,与课程的名字综合实践相呼应。希望学习完这门课后能够对生成Docker应用程序有一定程度的了解,对开发-编写Dockerfile-创建自定义镜像-定义Docker-compose-启动Docker应用-测试-部署或继续开发这一系列步骤形成大致印象。
二、了解微服务
一种新型的软件架构——微服务
1.微服务是什么
微服务架构是一项在云中部署应用和服务的新技术。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。
2.微服务的特点
- 小到只有单一职责
- 去容器化并且作为 Unix Service 安装
- 分布在不同的版本控制代码库里
- 自动初始化
- 关注状态和自动扩展
- 它们通过统一格式的接口进行交互
3.相较于传统的软件架构,微服务有什么优缺点
优点:
- 每个服务彼此隔离——可以轻松的监控每个容器所消耗的资源,可以单独部署,不用每次发布某个功能都经历一次全服务发布;
- 部署简单——不需要了解服务技术细节,主要掌握容器管理API即可;
- 快速构建——容器是轻量级技术,可以非常快速的构建,容器启动页很快,因为没有繁琐的操作系统引导机制。
缺点:
- 容器技术不够成熟、不够安全,因为容器彼此共享了主机的OS内核;
- 需要自己管理容器基础架构以及可能运行的VM基础架构,服务的可用性和维护性高度依赖于服务治理,如果治理得不好将会是灾难;
- 部署微服务比起单体服务的部署更加复杂。微服务通常由数十甚至上百个服务组成。服务以不同的语言和架构编写,每个都是迷你应用程序,具有自己特定的部署、资源、扩展和监控要求。
- 分布式系统可能复杂难以管理,并且分布部署导致跟踪问题难。
4.微服务的部署
单主机多服务实例模式——使用此模式,用户要提供一到多台物理或虚拟主机,在每个主机上运行多个服务实例。
单主机单服务实例模式——每台主机上运行独立的服务实例。这一模式有两种不同实现——单虚拟机单服务实例和单容器单服务实例。
-
单虚拟机单服务实例—把每个服务打包为一个虚拟机镜像,,每个服务实例就是一台使用此镜像启动的虚拟机。
-
单容器单服务实例—每个服务实例运行在自有容器中。容器是操作系统级别的虚拟化机制。每个容器包含一个或多个运行在沙盒中的进程。从进程的角度看,它们有着自己的端口命名空间和根文件系统。用户能够限制容器的内存和 CPU 资源,有些容器还能限制 I/O 速率。
三、学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:
1、学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的。
(1)Docker
Docker 是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在本地编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
简单的理解,Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱和集装箱之间没有影响。也就是说,Docker平台就是一个软件集装箱化平台,这就意味着我们自己可以构建应用程序,将其依赖关系一起打包到一个容器中,然后这容器就很容易运送到其他的机器上进行运行,而且非常易于装载、复制、移除,非常适合软件弹性架构。
(2)Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。
通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
(3)Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
虽然我们可以通过docker commit命令来手动创建镜像,但是通过Dockerfile文件,可以帮助我们自动创建镜像,并且能够自定义创建过程。本质上,Dockerfile就是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它简化了从头到尾的构建流程并极大的简化了部署工作。
(4)Docker Machine
Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。
Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。
(4)Swarm
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
支持的工具包括:Docker Compose、Docker Machine等。
(5)k8s
K8S,就是基于容器的集群管理平台,它的全称是kubernetes。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效。
2、搭建docker环境,系统环境为Ubuntu
(1)容器的创建
docker run -it ubuntu /bin/bash
容器的删除
docker rm -f <容器ID>
容器的更新
docker update
命令可动态的更新一个或多个容器的配置。如:
docker run -dit --name test --kernel-memory 50M ubuntu bash
docker update --kernel-memory 80M test
容器的查询:
docker ps -a
(2)创建并维护自己的镜像仓库,
在docker hub上创建账号并创建自己的仓库,并在本地使用login登录
docker login
(3)拉取镜像
使用docker pull命令来载入 ubuntu 镜像:
docker pull ubuntu
上传镜像
docker push [docker ID]/[仓库名]:tagname
Dockerhub中也有了push上去的镜像