Docker前言
什么是Docker
--
**下面这些颜色没啥特殊意思,单纯想看看都有啥样式。♪(\^∇^*)**
>s Docker的思想来自与集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会相互影响。那么我们就不需要专门运送水果的船和专门运送化学品的船了,只要这些货物在集装箱里封装的好好的,那么我们就可以用一艘大船把他们都运走。
>d docker就是类似的理念,云计算好比大货轮,docker就是集装箱。
>i 不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们的依赖软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突,比如IIS和Apache访问端口冲突。这个时候就要隔离.net网站和PHP网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高,docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小很多。
|特性|虚拟机|容器|
|-|-|-|
|隔离级别|操作系统级|进程级|
|隔离策略|Hypervisor|cGroups|
|系统资源|5-15%|0-5%|
|启动时间|分钟级|秒级|
|镜像存储|GB-TB|KB-MB|
|集群规模|上百|上万|
|高可用策略|备份、、容灾、迁移|弹性、负载、动态|
>w 你开发软件的时候用的是Ubuntu,但是运维管理的都是centOS,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centOS的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centOS不支持,在转移过程中运维就得想办法解决这样的问题,这时候要是有docker就可以直接把开发环境封装转给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
> 在服务器负载方面。如果单独开一个虚拟机,那么虚拟机会占用空闲的内存,docker部署的慌这些内存就会被利用起来。
总之dicker就是集装箱原理。可以起到虚拟机的隔离作用,但是比虚拟机轻了不是一星半点。
但是Docker本身并不是容器,它是创建同期的工具,是应用容器的引擎。
想要搞懂Docker,其实看一下它的两句口号就行。
第一句是:“Build,Ship and Run”
就是:“搭建、发送、运行”
举个栗子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把房子盖好了。
结果我住了一段时间,想搬到另一个空地去,这时候按照以往的办法,我只能从头再来一遍。
但是这时候,跑来个巫婆,教会我一种魔法。可以把我盖好的房子复制一份,做成"镜像",放在我的背包里。等我到了另一片空地,就用这个镜像,复制一套房子,摆在那里,拎包入住。
所以,Docker的第二句口号就是:“Build once, Run anywhere”(搭建一次,到处能用)。
Docker技术的三大核心概念,分别是:
* **镜像(Image)**
* **容器(Container)**
* **仓库(Repository)**
**镜像:** 镜像(Image)就是一堆只读层的统一视角。
**容器:** 容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器最上面那一层是可读写的。
**仓库:** 仓库(Repository)是集中存放镜像的地方。官方服务Docker Hub.
在刚才的例子里面,那个放在包里的"镜像",就是**Docker镜像**,背包就是**Docker仓库**,在空地上,用魔法造好的房子,就是一个**Docker容器**。
说白了,这个Docker镜像,是一个特殊的文件系统,它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构件之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但是生活用品之类的,都是没有的,谁用谁负责添置。
负责对Docker镜像进行管理的,是**Docker Registry服务** (类似仓库管理员)。
Docker Registry 服务对镜像的管理是非常严格的,并不是任何人建的任何镜像都是合法的。
最常使用的Registry公开服务,是官方的**Docker Hub**,这是默认的Registry,并拥有大量的高质量的官方镜像。
看到这里,希望你能对Docker,有一个大致初步的印象。