Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。

从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd – nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施。

——来自维基百科

项目介绍

2013年docCloud公司将Docker项目开源。

Docker项目:

  • GitHub上开发的Moby开源项目的一部分
  • Apache license2.0许可证协议
  • Go语言编写

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

容器是什么

定义:容器是容器image运行时的实例。

通俗的理解:软件界的集装箱(隔离、封装)

container

容器提供有限的隔离性,运行单独的应用。

容器和虚拟化的对比

virtual machines vs Container

虚拟机中:Hypervisor和Guest Operating System非常占资源

容器和虚拟机的对比

容器虚拟机
启动速度秒级,毫秒级启动数秒至数十秒
系统内核共享内核不共享内核
实现技术利用Linux内核技术Namespace/Cgroup等实现依赖虚拟化技术实现,由Hypervisor层实现对资源的隔离
隔离效果进程级别的隔离系统资源级别的隔离
资源消耗(性能)容器中的应用只是宿主机上的一个普通进程使用虚拟化技术,就会有额外的资源消耗和占用
资源调用性(敏捷性)应用进程直接由宿主机OS管理应用进程需经过Hypervisor的拦截和处理,才能调用系统资源
运行数量一台服务器上能启动1000+容器一台服务器上一般不超过100台虚拟机
应用DevOps、微服务等用于硬件资源划分
镜像分层镜像非分层镜像

容器编排引擎

可以把多服务器组成集群。

CNCF基金会

CNCF

OCI容器规范

OCI:Open Container Initiative
隶属于linux foundation
在创建容器格式和容器runtime的开放行业标准

OCI

Runtime

OCI下的Runtime规范旨在指定容器的配置、执行环境和生命周期。
Runtime是对容器运行时的相关状态和操作进行管理的工具。Runtime定义了如下规范对容器进行管理:

bundle.md
(Filesystem BUndle)
bundle中包含了运行容器所需要的所有信息,只要是config.json文件和rootfs。Runtime根据bundle启动容器。
config.md包含对容器实施标准操作所必须的元数据,存放于conf.json文件中。如oci版本、rootfs路径、mount目录、process、platform、容器hostname等。
config-linux.mdLinux平台上对config.md的扩展,内容也包含在conf.json文件中。如namespace、devices、cgroupPath、resources、sysctl、readonlyPath等。
runtime.md定义了3部分内容:容器状态(如status、pid等)、容器相关操作(如create、kill等)、容器生命周期。
runtime-linux.md是Linux平台上对runtime.md的补充

Runtime工具

  • runC是Docker公司2015年发布的负荷OCI规范的runtime 工具。runC由Libcontainer演变而来。
  • 业界其他runtime工具有Linux上的LXC,COreOS的rkt等。

Docker Engine介绍

Docker架构

docker Architecture

Docker的容器命令、容器镜像、存储等详见链接:

https://pmvt.cn/fast/docker-fast-track/index.html


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!



0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注