应用容器引擎之 docker 学习(一)docker的定义+架构以及三要素+与传统虚拟机的对比

docker是什么

1.Docker 是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口。docker是用go语言编写的。

3.一个完整的Docker有以下几个部分组成:

DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器

2.docker的logo很有意思,是一条蓝色的鲸鱼上面有很多的集装箱。
在这里插入图片描述
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。

4.在这里插入图片描述在这里插入图片描述

更详细的理解docker:https://www.zhihu.com/question/28300645

docker为什么会出现

举例理解:
你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境(开发人员的代理,环境各种东西)直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
eg:以往的搬家:搬老家里的东西,放在新家。
有了docker之后的搬家,不动老家里的东西,把原来家的整栋楼搬去了新地方。(搬楼)

现在开发人员交镜像。

个人理解:每个集装箱就是一个容器,每个容器里装着开发工程师需要运行的软件,运维工程师,装一个docker(就是那条鲸鱼),背上有几个集装箱,就有几个容器。

docker架构

在这里插入图片描述
1.client端是在命令行中实现的,命令操作的终端。

2.Docker采用 C/S架构 Docker daemon(docker 守护进程) 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)

3.客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。

Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon(守护进程) 交互

在这里插入图片描述第一是客户端1,…客户端n

docker三要素(镜像、容器、仓库)

镜像是模板,容器是镜像的实例。

1.镜像
在这里插入图片描述2.容器
在这里插入图片描述
3.仓库
在这里插入图片描述
4.小总结
在这里插入图片描述
详细的理解:
1.镜像

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
当新建一层时,之前的那一层就已经成为了镜像层,运行时是自下而上的,所以结果肯定会包含上一层所执行的结果,因为你对之前的镜像层没有进行插入操作,就只是在往上叠加,所以除了现在这层之外的所有层都是一个cache,执行起来比较快。
当你只想执行这一层而且不想要之前某一层的结果时,可以在Dockerfile里边进行修改删掉这一层的run,但是注意这个cache就被破坏了,需要重新执行得到一个新的cache,但是对于结果没有影响,就是比之前慢一点,因为要重新生成cache。

2.容器

个人对于镜像(Image)和容器(Container)的理解,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体
容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间(namespace)
因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全

3.仓库

镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

docker和虚拟机的对比

在这里插入图片描述
虚拟机模拟各种库,内核,还模拟各种硬件。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述1.我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,
虚拟机一旦被开启,预分配给它的资源将全部被占用。
每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

2.而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。
容器包含应用和其所有的依赖包,但是与其他容器共享内核
容器在宿主机操作系统中,在用户空间以分离的进程运行

3.容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。通过下面这幅图我们可以很直观的反映出这两者的区别所在。

在这里插入图片描述

为什么docker比虚拟机快

在这里插入图片描述docker引擎就是蓝鲸鱼。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值