博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Docker-2】Docker组成和原理
阅读量:4029 次
发布时间:2019-05-24

本文共 2100 字,大约阅读时间需要 7 分钟。

1. Docker理念

Docker是基于Go语言开发的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

总之一句话,解决了运行环境和配置问题软件容器,方便做持续集成并且有助于整体发布的容器虚拟化技术。

2. Docker引擎

图片

Docker Engine 是具有以下主要组件的客户端和服务端应用程序:

  • 服务器时一种长期运行的程序,称为守护程序进程(dockerd 命令)
  • REST API ,它指定程序可以用来与守护进程进行通信并指示其操作的接口
  • 命令行界面(CLI)客户端(docker 命令)

CLI使用Docker REST API 通过脚本或者直接CLI 命令来控制Docker守护程序与Docker守护程序进行交互。

3. Docker架构

Docker使用C-S 架构。Docker客户端与守护进程进行通信,该守护进程完成了构建,运行和分发Docker容器的任务。Docker客户端和守护程序可以在同一操作系统上运行,也可以将Docker客户端连接到远程Docker守护程序。

图片

3.1. Docker守护程序

Docker守护程序侦听Docker API请求并管理Docker对象,例如镜像,容器,数据卷等。守护程序还可以与其他守护程序通信以管理Docker服务。

3.2. Docker客户端

Docker客户端是许多Docker用户与Docker交互的主要方式。同时,Docker客户端可以与多个守护程序通信。

3.3. Docker仓库

Docker仓库存储着Docker镜像。其中,Docker Hub 是任何人都可以使用的Docker仓库,并且默认情况下,当你在使用docker pull 的命令时,会从Docker Hub上下载你所需要的镜像,但是,我们也可以自己搭建私人的Docker镜像仓库。

3.4. Docker镜像

Docker镜像是用来创建Docker容器的。通常,一个镜像基于另一个镜像,并进行了一下其他自定义操作。

除了在使用镜像仓库里的镜像外,我们也可以构建自己的镜像,例如我们可以使用docker build命令来构建自己的镜像,也可以使用简单的语法创建一个DockerFile来构建自己的镜像,其中DockerFile中的每个指令都会在镜像中创建一个层。当需要更改Docker并重建镜像时,仅需要重建那些已更改的层。与其他虚拟化技术相比,这是使镜像如此轻巧,小型和快速的部分原因。

3.5. Docker容器

Docker容器是Docker镜像运行的实例。我们可以使用Docker客户端来创建、启动、停止、删除容器,也可以将容器连接到一个或者多个网络,将存储连接到,甚至根据当前的状态来创建新镜像(docker build)

其中,值得注意的是,如果删除容器后,没有存储在磁盘中的数据将会永久消失。

综上,其他Docker 仓库、镜像和容器之间的关系可以类比Java中的面向对象。

其中,Docker仓库就是我们的大脑,当我们需要一个User类或者Tiger类时,我们就会从我们的大脑仓库中去寻找,当找到是,我们就是在我们的程序中写出User类和Tiger类,这些类就是Docker中的镜像,而当我们使用这些类时,我们就需要new出这些类的实例来,这些类的实例就是Docker中的容器。这样,我们就能简单的区分Docker中这三个重要的概念。

4. Docker原理

4.1. Docker的容器隔离

Docker使用一种称为 namespaces 来提供容器的隔离技术,运行容器时,Docker会为该容器创建一组 namespaces。这些 namespaces 提供了一层隔离。

4.2. 为什么Docker比VM快

(1)docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

图片

图片

转载地址:http://fqmbi.baihongyu.com/

你可能感兴趣的文章
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
网页设计里的浮动 属性
查看>>
Maximum Subsequence Sum
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
Django 的Error: [Errno 10013]错误
查看>>
机器学习实战之决策树(一)
查看>>
[LeetCode By Python] 2 Add Two Number
查看>>
python 中的 if __name__=='__main__' 作用
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]9. Palindrome Number
查看>>