Dcoker心得 #1 Docker的基本概念和原理

基本原理

Docker 的实现,主要归结于三大技术:

  • 命名空间 ( Namespaces )
  • 控制组 ( Control Groups )
  • 联合文件系统 ( Union File System )

命名空间( Namespaces ) ,是linux核心在2.4版本后逐渐引入的一项用于运行隔离的模块,利用 PID Namespace,Docker 就实现了容器中隔离程序运行中进程隔离这一目标。

资源控制组( Control Groups ) ,是linux在2.6 版本后逐渐引入的一项对计算机资源控制的模块。顾名思义,资源控制组的作用就是控制计算机资源的,CGroups 主要做的是硬件资源的隔离。虚拟化除了制造出虚拟的环境隔离同一物理平台运行的不同程序之外,另一大作用就是控制硬件资源的分配,CGroups 的使用正是为了这样的目的。即隔离和分配两个作用。

联合文件系统 ( Union File System ),是一种能够同时挂载不同实际文件或文件夹到同一目录,形成一种联合文件结构的文件系统。联合文件系统本身与虚拟化并无太大的关系,但 Docker 却创新的将其引入到容器实现中,用它解决虚拟环境对文件系统占用过量,实现虚拟环境快速启停等问题。

Docker的核心组成分为四部分

  • 镜像 ( Image )
  • 容器 ( Container )
  • 网络 ( Network )
  • 数据卷 ( Volume )

镜像 ( Image ) ,可以理解为一个只读的文件包,包含了虚拟环境运行最原始文件系统的内容。镜像有不同的版本,但因为是分层结构,所以不同的镜像版本可以建立在公共的基础层上,即多个不同版本的镜像占用的空间小于这些镜像本身大小之和。
1249301-20190525233438006-163463250.jpg

容器 ( Container ) 就更好理解了,在容器技术中,容器就是用来隔离虚拟环境的基础设施,而在 Docker 里,它也被引申为隔离出来的虚拟环境。镜像内存放的是不可变化的东西,当以它们为基础的容器启动后,容器内也就成为了一个“活”的空间。用更官方的定义,Docker 的容器应该有三项内容组成:

    一个 Docker 镜像
    一个程序运行环境
    一个指令集合

网络 ( Network ) 在 Docker 中,实现了强大的网络功能,我们不但能够十分轻松的对每个容器的网络进行配置,还能在容器间建立虚拟网络,将数个容器包裹其中,同时与其他网络环境隔离。另外,利用一些技术,Docker 能够在容器中营造独立的域名解析环境,这使得我们可以在不修改代码和配置的前提下直接迁移容器,Docker 会为我们完成新环境的网络适配。对于这个功能,我们甚至能够在不同的物理服务器间实现,让处在两台物理机上的两个 Docker 所提供的容器,加入到同一个虚拟网络中,形成完全屏蔽硬件的效果。

数据卷 ( Volume ) 得益于 Docker 底层的 Union File System 技术,docker除了能够从宿主操作系统中挂载目录外,还能够建立独立的目录持久存放数据,或者在容器间共享。在 Docker 中,通过这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 ( Volume )。


Docker Engine

Docker Engine,目前这款实现容器化的工具是由 Docker 官方进行维护的,Docker 官方将其命名为 Docker Engine,同时定义其为工业级的容器引擎 ( Industry-standard Container Engine )。在 Docker Engine 中,实现了 Docker 技术中最核心的部分,也就是容器引擎这一部分。

Docker Engine 是一款软件,但实实在在去深究的话,它其实算是由多个独立软件所组成的软件包。在这些程序中,最核心的就是

- docker daemon 
- docker CLI 

1249301-20190525225940351-195534263.jpg

docker daemon 所有我们通常认为的 Docker 所能提供的容器管理、应用编排、镜像分发等功能,都集中在了 docker daemon 中,而我们之前所提到的镜像模块、容器模块、数据卷模块和网络模块也都实现在其中。在操作系统里,docker daemon 通常以服务的形式运行以便静默的提供这些功能,所以我们也通常称之为 Docker 服务。
1249301-20190525225918729-1336617958.jpg

在 docker daemon 管理容器等相关资源的同时,它也向外暴露了一套 RESTful API,我们能够通过这套接口对 docker daemon 进行操作。或者更确切的说,是通过这套 RESTful API 对 docker daemon 中运行的容器和其他资源进行管理。

那么问题来了,如果我们在控制台中编写一个 HTTP 请求以借助 docker daemon 提供的 RESTful API 来操控它,那显然是个费脑、费手又费时间的活儿。所以在 Docker Engine 里还直接附带了 docker CLI 这个控制台程序。

docker daemon 和 docker CLI 所组成的,正是一个标准 C/S ( Client-Server ) 结构的应用程序。衔接这两者的,正是 docker daemon 所提供的这套 RESTful API。

参考资料:
开发者必备的 Docker 实践指南

转载于:https://www.cnblogs.com/miyauchi-renge/p/10923728.html

Docker和Kubernetes是两个在容器化应用领域非常流行的工具。 Docker是一种容器化平台,它可以将应用程序及其依赖项打包到一个可移植的容器中,以便在不同的环境中运行。Docker使用了Linux内核的容器技术,通过隔离进程、文件系统和网络等资源,实现了高度可移植、可扩展且隔离的应用运行环境。Docker容器可以在任何支持Docker操作系统上运行,而不受底层操作系统的限制。 Kubernetes是一个开源的容器编排和管理平台,它可以帮助我们自动化容器的部署、扩展和管理。Kubernetes提供了一个集群管理的框架,可以将多个Docker容器组织成一个弹性、可伸缩的应用。Kubernetes通过自动化调度、负载均衡、容错恢复等机制,实现了高可用性和高性能的容器集群。 基本原理上,Docker通过使用Linux内核的容器技术实现了应用程序与底层操作系统的隔离。它使用了命名空间、控制组、文件系统等技术,确保每个容器拥有独立的运行环境。 Kubernetes则是建立在Docker之上的容器编排和管理平台。它通过使用API来管理容器集群,提供了自动化的容器编排、服务发现、负载均衡、水平扩展、滚动升级等功能。Kubernetes利用标签和选择器机制,可以方便地对容器进行管理和操作。 总的来说,Docker提供了容器化的运行环境,而Kubernetes则提供了容器集群的编排和管理能力,使得我们可以更方便地部署和管理容器化应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值