容器技术基础(20210728笔记)
容器技术基础
容器概述
容器的诞生
软件架构的演进历程
单体式架构
【不考虑架构】
传统的项目会包含很多功能,是一个大而全的“超级”工程。
传统的单体应用无法适应快速增长的业务需求
单体应用的系统比较膨胀与臃肿,导致进行可持续开发和运维很困难。
系统复杂:内部多个模块紧耦合,关联依赖复杂,牵一发而动全身
运维困难:变更或升级的影响分析困难,任何一个小小修改都可能导致单体应用整体 运维出现故障。
无法扩展:很难通过水平扩展、多机部署的方式来提升系统的吞吐量,一般只能通过纵向不断堆单个机器或者群集的性能配置来提升。面临海量的互联网访问需求,很容易出现故障。(单台机器宕机影响业务线)
SOA架构
【解决单体式——拆】
SOA(面向服务架构)的思路:将一个庞大的单体应用拆分成多个服务模块,然后再将这些服务模块按照业务逻辑串起来,对外提供应用服务。
SOA:即面向服务的架构(SOA),是集成多个较大组件(一般是应用)的一种机制, 它们将整体构成一个彼此协作的套件。一般来说,每个组件会从始至终执行一块完整的业务 逻辑,通常包括完成整体大action所需的各种具体任务与功能。组件一般都是松耦合的,但这并非SOA架构模式的要求。
SOA架构的特征
基于SOA服务思想进行功能的抽取(重复代码问题解决),以服务为中心来管理项目。
各个系统之间要进行调用,所以出现ESB来管理项目(可以使用各种技术实现:webservice, rpc等)。
ESB是作为系统与系统之间桥梁,很难进行统一管理。
微服务架构
核心思路是拆分。单体项目的问题,通过把项目拆分成一个个小项目就可以解决。
与SOA区别:
微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,真正地实现服务自治;
微服务的思想进入到单个业务系统内部,实现真正的组件化。
可以做实时的扩/缩容
连通云服务、容器
应用落地部署面临的挑战
敏捷的诉求
云间迁移
环境一致性
Docker与容器
容器是什么
容器技术是一种进程隔离的技术, 应用可以运行在一个个相互隔离的容器中。
与虚拟机相同的是可以为这些容器设置计算资源限制,挂载存储,连接网络;
而与虚拟机不同的是,这些应用运行时共用着一个Kernel
容器技术大大提升了对系统资源的利用率,也提高了应用的部署迁移效率。
一台虚拟机/物理服务器上只跑一个应用——但会造成资源浪费
容器相当于一台小型虚拟机,每台小虚拟机(容器)跑一个应用
容器自带应用运行的所有环境,只需将软件迁移过去即可运行
Namespaces:分配ID
cgroups:分配资源
SELinux:分配权限
Docker是什么
2010年,28岁的Solomon Hykes在旧金山成立专做 PaaS的公司,起名dotCloud,定位为为软件开发提供相 关的配套设施,包括语言环境,运行环境,存储等基础服 务。
在PaaS激烈竞争环境下,dotCloud为了生存,不得已开源核心引擎Docker,不料柳暗花明,dotCloud看到社区及众多PaaS大佬(Amazon, Google, IBM, MS, RedHat, VMware)对Docker的追捧及认可,顺势而为。
Docker与容器
Docker实际上是一家公司,在 2013年这家公司还叫做DotCloud, Docker是他们公司的一个容器管理产 品,2013年初,DotCloud决定将Docker开源,Docker在短短几个月间 风靡全球,DotCloud公司也更名为 Docker。
Docker核心技术及架构
Docker核心技术
进程隔离技术——namespace
Linux Namespace提供了一种内核级别的隔离系统资源的方法,通过将系统的全局资源放在不同的 Namespace中,实现资源隔离的目的,不同的Namespace程序,可以享有一份独立的系统资源。
进程资源配额技术——cgroups
利用Namespace可以构建一个相 对隔离的容器,而通过cgrous,可以 为容器设置系统资源配额,包括CPU、 内存、IO等。
其他进程隔离技术
Selinux和apparmor可以增强对容器的访问控制;
Capability的主要实现在于将超级用户root的权限分割成多种不同的capability权限,从而更严格的控制容器的权限。
Netlink技术可完成Docker容器的网络环境配置与创建。
这些Linux 内核技术,从安全、隔离、防火墙、访问等方面为容器的成熟落地打下了坚实的 基础。
Docker构造:client-server
Execdriver存储了容器的定义的配置信息;
Networkdriver的作用是完成docker容器网络环境的配置,包括容器的IP、端口、防火墙策略及 与主机的端口映射等;
Graphdriver则负责对容器镜像的管理;
容器 VS 虚拟化
容器内没有操作系统
虚拟机上装多个容器,实现一台虚拟机上跑多个应用
Docker的优势
容器常用术语
Docker Engine 容器引擎:基础设施标准化 使得底层OS透明化
Docker Image 容器镜像:应用交付标准化 代替了以往代码 +一堆部署文档 的交付方式
Docker Container 容器:运维管理标准化 种类应用都跑在一个个标准化的容器中
Docker Registry 容器仓库:分发部署 标准化一次构建,随处 部署
Docker核心概念
镜像构造:
打造镜像——推入镜像仓库(公有:都可访问/私有:需要IP、密码)——拉入其他环境——部署容器应用
【一次构建,多处部署】
Docker安装
Windows Docker安装
Windows10以前版本:
安装 Docker Toolbox,同时还附加安装
Windows10版本:
安装Docker Desktop for windows
https://docs.docker.com/docker-for-windows/install/
Linux安装Docker
安装前准备
cat /etc/centos-release
uname –r #内核版本在3.10以上
配置yum源
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker 软件
yum install docker-ce -y
启动 Docker 服务
systemctl start docker
systemctl enable docker
验证
docker info • docker version
Docker基本操作:启动Docker容器
拉取镜像
docker search centos
docker pull centos
查看镜像
docker images
创建一个后台容器
docker run –itd --name c1 centos /bin/bash
查看容器
docker ps [-a]
docker inspect c1
容器生命周期管理
docker stop c1
docker start c1
docker restart c1
docker rm c1
打印容器的控制台输出
docker logs c1
进入后台容器
docker exec -it c1 /bin/bash
Docker自定义镜像
1、首先开发者在开发环境机器上开发应用并制作镜像。Docker执行命令,构建镜像并存储在机器上;
2、开发者发送上传镜像命令,Docker收到命令后,将本地镜像上传到镜像仓库。
3、开发者向生产环境机器发送运行镜像命令,生产环境机器收到命令后,Docker 会从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。
Docker镜像仓库
概述
集中存放镜像的地方,容易混淆的是注册服务器,它是管理镜像仓库的服务器,每个服务器可以有多个仓库,每个仓库可以有多个镜像,因此仓库可以认为是一个具体的目录
例如:dl.dockerpool.com/repo/centos:tag
dl.dockerpool.com是注册服务器,repo是镜像仓库的名称,centos是镜像的名称;
分类
公共仓库:docker官方维护的公共库,https://hub.docker.com/ ,可注册账号后构建自己的私有存储空间
私有仓库:在公司内部为了提高分享的速度,需要在公司内部自己搭建一个本地的仓库,供私人使用;
PaaS平台部署
http://212.129.164.208/