运维进阶-docker介绍

182 阅读5分钟

Linux容器技术基础

容器的优势

  • 一次构建 多次运行
  • 通常使用harbor存储镜像
  • k8s docker的出现 解决的问题
    • 虚拟机部署 部署应用 部署lb、服务的扩容、服务的依赖 image.png

技术的演进

image.png 云原生使用开源软件实现如下企业如下需求:

  • 将应用程序细分为微服务
  • 将每个微服务封装装到独自的容器环境运行
  • 动态编排业务容器并提高资源利用率
  • 实现业务容器动态弹性伸缩

演进历史

 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…

架构图

image.png

组件

  • Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker服务进程和容器。

  • Docker 服务端(Server):Docker守护进程,运行 docker容器。

  • Docker 客户端(Client):客户端使用docker 命令或其 他工具调用docker API。

  • Docker 仓库(Registry): 保存镜像的仓库,类似于git或 svn这样的版本控制系

制品

  • Docker 镜像(Images):镜像可以理解为创建实例使用 的模板。

  • Docker 容器(Container): 容器是从镜像生成对外提供 服务的一个或一组服务

虚拟机 VS 容器

image.png

  • 资源利用率更高:一台物理机可以运行 数百个容器,但是一般只能运行数十个虚拟机。

  • 开销更小:不需要启动单独的虚拟机占用硬件资源。

    • 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用户?怎么解决账户 重名问题?

image.png

image.png

image.png

高级别运行时 接受客户端的指令 对外提供API 发送给低级别运行时(也就是container)

image.png

image.png

image.png

部署Docker、对Docker进行镜像加速及使用systemd进行资源限制等参数优化、Docker的常用命令

docker的安装

image.png

image.png

写时复制 COW copy on write

image.png

image.png

image.png

image.png

image.png

push 镜像

image.png

image.png

现代应用容器技术Docker的特性、架构与工作机制、存储引擎介绍 

Docker的存储管理,数据卷和数据卷容器