Docker是什么
一、Docker含义
- 把他想象成一个用了一种新颖方式实现的超轻量【虚拟机】,当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。
二、为什么要用容器
- 一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用Mysql那我就找个装好Mysql的容器,运行起来,那么我就可以使用 Mysql 了。
- 那么我直接装个 Mysql 不就好了,何必还需要这个容器这么诡异的概念,可是你要真装Mysql的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了, 所有的东西都要重新来,可能还要把配置在重新弄一遍。
- 但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,Mysql 的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。
- 若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。 通过容器,整个开发、测试和生产环境可以保持高度的一致。此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。
三、Docker 容器相对于 VM 有以下几个优点
- 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久
- 资源利用率高,一台普通 PC 可以跑上千个容器,你跑上千个 VM 试试
- 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源
四、Docker镜像(相当于一个类)
- Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。
- 例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。
- 镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。
- 用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。
五、Docker容器(相当一个对象)
- Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),
- Docker利用容器来运行和隔离应用。
- 容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
- 可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),
- 以及与运行在其中的应用程序打包而成的应用盒子。
六、Docker仓库(存放镜像的地方)
- Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。
- 有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,
- 其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。
- 例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。
- 根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
- 目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,
- 可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,
- Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
- 当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,
- 只需将其从仓库pull下来就可以了。