Docker简介与基本原理

一、Docker简介

1.什么是容器?

容器 是一种 软件打包 技术

容器 是对 进程 进行 隔离

2.容器的生态

3.什么是Docker?

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。

说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在原理和应用上和VM的差别还是很大的,并且docker的专业叫法是应用容器(Application Container)。

需要额外指出的是,Docker并不等于容器(containers),Docker只是容器的一种,其他的种类的容器还有Kata container,Rocket container等等。

 

二、基本原理

Docker 利用Linux中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(命名空间)来创建独立的容器。

一句话概括起来 Docker 就是利用 Namespace 做 资源隔离,用 Cgroup 做 资源限制,利用 Union FS 做 容器 文件系统轻量级 虚拟化 技术。

Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术。

1.namespace技术(资源隔离)

namespace:是Linux内核提供的一种 资源隔离 的机制

Linux Namespace 主要有6种命名空间: Mount Namespace,UTS Namespace, IPC Namespace, PID Namespace, Network Namespace, User Namespace, Cgroup Namespace

详情请看下表:

2.cgroups技术(资源限制)

上面已经讲过Docker 容器运行起来是一个直接运行在宿主机上面的进程,那么如果限定每个容器最多消耗多少CPU资源呢?

如果一个容器疯狂的消耗资源岂不是会影响同一宿主机上面其他的容器?所以Docker就需要一个限制容器能够使用资源上限的机制,那就是Linux Cgroup技术。

Linux Cgroup 全称是Linux Control Group。它最主要的作用是限制一个进程组能够使用的资源上限,包括CPU,MEM,DISK,NET等等。

3.Union FS(文件系统)

每个容器运行起来后都有一个独立的文件系统,例如Ubuntu镜像的容器能够看到Ubuntu的文件系统,Centos能够看到Centos的文件系统,

不是说容器是运行在宿主机上面的进程吗,为什么能够看到和宿主机不一样的文件系统呢?那就要归功于Union FS,全称是Union File System,联合文件系统。

将多个不同位置的目录联合挂载到同一个目录,将相同的部分合并。Docker利用这种联合挂载能力,将容器镜像里面的多层内容呈现为统一的rootfs(根文件系统),

即root用户能够看到的根目录底下所有的目录文件。rootfs打包了整个操作系统的文件和目录,是应用运行时所需要的最完整的“依赖库”,也就是我们说的“镜像”。

镜像 分为基础镜像只读层Init层,以及 读写层

Init 层:存放的是/etc/hostname,/etc/resolv.conf 等, docker commit的时候不提交。

读写层:一开始的时候为空,用户如果修改了文件系统,比如说增删改了文件,docker commit的时候就会提交这一层信息。

 

总结:Docker容器 就是利用 Namespace 做 资源隔离Cgroup 做 资源上限限制rootfs 做 文件系统 运行在宿主机上面的一个特殊进程

 

三、容器VS虚拟机

1.容器与虚拟机区别

如果将计算机的层次做一下简单的划分,最底层是硬件,最上层是软件,中间是操作系统。

我们非常熟悉的虚拟机,就是一个物理硬件层抽象,运行在硬件之上,它向下面对一套硬件和硬件接口,对其进行虚拟,然后向上提供一套独立的操作系统,然后就可以在操作系统之上再运行各种软件应用等。

这就使得虚拟机这个东西非常庞大沉重,因为包含了一整套操作系统,一般都好几G,还可能有一套单独的存储空间,启动时间长,一般几分钟,有SSD不算,并且不容易移植

因为我们知道,在安装操作系统的时候,会根据硬件的不同编译出不同的内核,而每台电脑的硬件配置几乎不会完全一样,因而直接把一台电脑的操作系统文件考到另一台一般是没法启动的。

容器是一个应用层抽象,运行在操作系统之上的,确切地说是操作系统内核之上,面对的是操作系统提供的接口,属于进程级别;容器对我们的代码和依赖进行打包,比如一个docker中只有一个python3,还有TensorFlow以及其他的package

这样体积就很小启动快,只需几秒or几毫秒,且容易移植(不同硬件上的同一操作系统向上提供相同的接口)。

2.为什么Docker比虚拟机更加轻量?

容器:是一个应用层抽象,用于将代码和依赖资源打包在一起多个容器可以在同一台机器上运行,共享操作系统内核

但各自作为独立的进程在用户空间中运行,与虚拟机相比,容器占用的空间较少,瞬间便能完成启动。


虚拟机:是一个物理硬件层抽象,用于将一台服务器变成多台服务器,管理程序允许多个虚拟机在一台机器上运行,但每个虚拟机都包含一整套操作系统

一个或多个应用,必要的二进制文件和资料库。因此占用大量空间,而且虚拟机启动也十分缓慢。

 

四、Docker的优势

1.更快速的交付和部署

Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。

例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。

Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间

2.高效的部署和扩容

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容方便下线的你的应用和服务,这种速度趋近实时。

3.更高的资源利用率

Docker 对系统资源利用率,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能,同时系统的开销尽量

传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

4.更简单的管理

使用 Docker,只需要小修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

 

容器的特点:秒级部署、轻量级、易于移植、弹性伸缩

 

五、Docker引擎

docker引擎是一个c/s结构的应用,主要组件见下图:

  • Server是一个常驻进程
  • REST API 实现了client和server间的交互协议
  • CLI 实现容器和镜像的管理,为用户提供统一的操作界面

 

六、Docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker容器 通过 Docker镜像 来创建。容器镜像的关系类似于面向对象编程中的对象

Docker组成:

Docker Client           #客户端

Docker Deamon       #守护进程

Docker Image           #镜像

Docker Container      #容器

Docker Registry        #仓库

 

当使用docker run命令启动一个容器时,它究竟是如何工作的?

 

七、Docker三大核心概念与基础命令

Docker三大核心概念:镜像(Image) 、容器(Container) 、库(Repository)

文章链接:https://blog.csdn.net/lilygg/article/details/88544440

 

八、镜像 Image

1.镜像的核心原理

2.镜像的分层结构

3.镜像的构建

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、付费专栏及课程。

余额充值