Linux容器技术基础
容器的优势
- 一次构建 多次运行
- 通常使用harbor存储镜像
- k8s docker的出现 解决的问题
- 虚拟机部署 部署应用 部署lb、服务的扩容、服务的依赖
- 虚拟机部署 部署应用 部署lb、服务的扩容、服务的依赖
技术的演进
云原生使用开源软件实现如下企业如下需求:
- 将应用程序细分为微服务
- 将每个微服务封装装到独自的容器环境运行
- 动态编排业务容器并提高资源利用率
- 实现业务容器动态弹性伸缩
演进历史
1979年,Unix v7系统支持chroot,为应用构建一个独立的虚拟文件系统环境。
1999年,FreeBSD 4.0支持jail,是第一个商用化的OS虚拟化技术。
2004年,Solaris 10支持Solaris Zone,第二个商用化的OS虚拟化技术。
2004年 ~ 2007年,Google 内部大规模使用Cgroups等OS虚拟化技术。
2006年,Google开源内部使用的process container技术,后续更名为cgroup。
2008年,Cgroups进入了Linux内核主线。
2008年,LXC(Linux Container)项目具备了Linux容器的雏型。
2013年,Docker项目正式发布,让Linux容器技术逐步席卷天下。
2014年,Kubernetes项目正式发布,容器技术开始和编排系统起头并进。
2015年,由Google,Redhat、Microsoft及一些大型云厂商共同创立了CNCF(Cloud Native Computing Foundation)。
2016年-2017年,容器生态开始模块化、规范化,CNCF接受Containerd、rkt项目,OCI发布1.0,CRI/CNI得到广泛支持。
2017年-2018年,容器服务商业化,AWS、Google云、阿里云、华为云、VMware,Redhat和Rancher等公司开始提供基于 Kubernetes的商业服务产品。
2019年-2021年,容器引擎技术飞速发展,新技术不断涌现,CNCF日益庞大。
截止2022年,CNCF聚集的贡献者超过17万、有130+项目、涉及全球187个国家
Docker的演进
- Docker是一个在2013年开源的应用程序并且是一个基于go语言编写是一个开源的PAAS服务(Platform as a Service,平台即服务的缩写),
- docker公司最早叫dotCloud后由于Docker开源后大受欢迎就将公司改名为 Docker Inc,总部位于美国加州的旧金山,
- Docker是基于linux 内核实现,Docker最早采用LXC技术(LinuX Container的简写,LXC是Linux 原生支持的容器技术,可以提供轻量级的虚拟化,
- Docker后改为自 己研发并开源的runc技术运行容器(1.11.0 (2016-04-13),在2016年12月捐献了container项目
低级容器运行时与高级容器运行时、OCI、CRI、cri-dockerd、CRI-O
runc技术 运行时技术 支持容器的
Docker的组成
参考 docs.docker.com/get-started…
架构图
组件
-
Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker服务进程和容器。
-
Docker 服务端(Server):Docker守护进程,运行 docker容器。
-
Docker 客户端(Client):客户端使用docker 命令或其 他工具调用docker API。
-
Docker 仓库(Registry): 保存镜像的仓库,类似于git或 svn这样的版本控制系
制品
-
Docker 镜像(Images):镜像可以理解为创建实例使用 的模板。
-
Docker 容器(Container): 容器是从镜像生成对外提供 服务的一个或一组服务
虚拟机 VS 容器
-
资源利用率更高:一台物理机可以运行 数百个容器,但是一般只能运行数十个虚拟机。
-
开销更小:不需要启动单独的虚拟机占用硬件资源。
- docker遵从apache 2.0协议,并通过(namespace及cgroup等)来提供容器的资源隔离与安全保障等,所以docke容器在运行 时不需要类似虚拟机(空运行的虚拟机占用物理机的一定性能开销)的额外资源开销
- 虚机需要单独启动linux镜像
-
启动速度更快:可以在数秒内完成启动。
-
总结:
- 在一个宿主机上通过多个虚拟机的形 式运行多个APP服务,也可以通过在 单独每个容器运行一个APP的方式实 现。
- 目的是为了实现环境隔离的同时运行 多个APP
容器的优缺点
优点
- 快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
- 高效虚拟化:不需要额外的hypervisor支持,直接基于linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
- 节省开支:提高服务器利用率,降低IT支出。
- 简化配置:将运行环境打包保存至容器,使用时直接启动即可。
- 快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移 到B宿主机,甚至是A平台迁移到B平台。
缺点
- 隔离性
- 安全性
引申的问题
1.怎么样保证每个容器都有不同的文件系统并且 能互不影响?
2.一个docker主进程内的各个容器都是其子进 程,那么实现同一个主进程下不同类型的子进 程?各个进程间通信能相互访问(内存数据)吗?
3.每个容器怎么解决IP及端口分配的问题?
4.多个容器的主机名能一样吗?
5.每个容器都要不要有root用户?怎么解决账户 重名问题?
高级别运行时 接受客户端的指令 对外提供API 发送给低级别运行时(也就是container)
部署Docker、对Docker进行镜像加速及使用systemd进行资源限制等参数优化、Docker的常用命令
docker的安装
写时复制 COW copy on write
push 镜像