目录
一、简介
Docker,翻译过来就是码头工人
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
小知识:沙盒也叫沙箱(sandbox)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。
GitHub地址:https://github.com/moby/moby
小知识:LXC为Linux Container的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。
docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/
二、docker到底是解决了什么问题?
我们来了解一下再没有docker之前工业界是如何解决程序部署运行问题的。
其实也没有什么花里胡哨的,在容器化技术还没有成熟之前,工业界要想部署一个程序,是直接把程序部署到物理服务器上然后暴露其ip地址的。
然后通过ststemd类的守护类程序把多个业务程序部署并管理起来,手动或自动的管理程序的启动和停止,还可以直观的查看每个业务程序的运行情况。
但是这种情况只管理了业务程序本身,并没有管理到业务程序的依赖。我们的程序不仅仅是只有程序文件本身就可以跑起来的,往往是有很多依赖组合起来才能正常运行,比如控制台组件、消息中间件、缓存中间件、分布式文件管理系统等等。往往一个业务程序就有好多个依赖绑定在一起,而多个业务程序所绑定的依赖版本也有可能不一致导致冲突。如下图所示:
而且这些依赖还是易变的,经常出现以来版本变更,新增或删减依赖的情况也是经常出现的。
因此无数个工程师尝试解决以上这个问题,最简单且直接的一个方案就是:出现上述问题的根本就是程序和依赖相耦合,那我们直接把程序和依赖一体化作为一个不可拆分的单元来管理。
因此当时的解决方案就是把程序和依赖放在一个虚拟机中独立管理,把虚拟机作为程序管理部署的基本单位。
虽然虚拟机为我们解决了依赖问题,但是也给我们带来了一些新的问题,主要在以下三点:
1、镜像庞大
2、启停速度慢
3、性能损耗大
因此我们需要一个终极的方案,在解决程序依赖问题的同时也解决虚拟机带来的三个问题。
因此容器化技术应运而生,那容器化技术是怎么解决以上三个问题的呢?
1.镜像庞大
镜像庞大问题往往是因为虚拟机中存储了运行操作系统所需要的所有系统文件,而对于同一系列的不同版本的操作系统来说,那你就存在大量相同的系统文件,这就是镜像庞大的问题来源。
那我们解决这一问题的方案也很简单,就是把那些相同的系统文件抽取出来就好。
然后当虚拟机2想要更改系统文件,那就把系统文件复制一份给虚拟机2就好了,这就是典型的copy-on-write的思想。
2.启停速度过慢
启停速度过慢的原因是每一次启动程序的时候都会对操作系统也做一次启停,如果启停大量的程序那就会启停很多次操作系统,所以我们就要把对操作系统的启停去掉就好了。
但是这样就动摇了虚拟机的根基了,虚拟机的核心思想是与操作系统隔离,完成操作系统的启停显然是要独立起来的,所以我们要自己实现一个“轻量化虚拟机”,把操作系统相关的启停开销给去掉。
因此通过namespace和CGroup隔离技术就可以将一个程序隔离起来独立启动,这时候就可以称之为一个“容器”了。
3.性能损耗大
出现上述问题的原因是:我们把多个程序部署在多个虚拟机上,而虚拟机本质也是一个完整的操作系统环境,多个程序运行在多个系统和多个程序运行在同一系统上相比,会出现很多操作系统上行为的重复和冗余,而这些重复和冗余就意味着对各个硬件资源的使用消耗,类似CPU、GPU等硬件。
而我们在第二点问题的解决方案--“容器”就基本解决了这个问题,把多个程序隔离开来而共同使用同一系统内核来减少对硬件资源的使用消耗。
4.docker
那么docker是什么?docker就是上面三个问题的解决方案的打包整合。
三、总结
这也是典型的封装思想,将复杂的程序和依赖关系封装在一个docker镜像当中,外界不需要在意其内在的实现方式,只需要使用暴露出来的接口即可。
关于docker的使用步骤,可以参考以下博客:docker入门,这一篇就够了。-CSDN博客
标签:容器,操作系统,虚拟机,程序,简述,启停,Docker,docker From: https://blog.csdn.net/csdn3043663729/article/details/143994473