zoukankan      html  css  js  c++  java
  • docker

    docker,早就听说了,但很模糊,似懂非懂,趁岁末难得压力小点,努力搞懂这个概念。不明白就查查资料弄明白,别人都已经吭哧吭哧地用上了,而我们还不知道那是个啥东东,这就是作死了。我就是这样子,作死的时间太长。可惜人不能活第二遍。

    以下是我目前的理解,不一定正确和全面,但有学习必有输出,先记录下来,而后可以从这里再出发。

    一、是什么
    docker是一个容器,项目可以在里面跑。所谓容器也者,必有边界。docker与外部环境,包括宿主机器、其他容器等进行了隔离,给运行其间的软件一个安静和谐的环境。有点类似虚拟机。

    二、有什么用
    可方便、快捷地部署软件。
    可在不同的机器、操作系统上方便、快捷地部署软件。
    由于软件运行于docker,docker屏蔽了外界的差异和细节,因此对于我们的软件而言,开发阶段和部署阶段的运行环境并无两样,可无缝嫁接。

    三、为啥要用
    感觉虚拟机也差不多是这个作用,那用docker究竟有啥好处?
    1、消耗资源小
    虚拟机的粒度是“虚拟出的机器”,而 Docker 的粒度则是“被限制的应用”,相比较而言 Docker 的内存占用更少,更加轻量级。

    我们线上有 16 台服务器,如果我尝试在本地使用 VirtualBox 配置每个实例 512 MB内存,那么它将占用我笔记本的两倍内存(说明他笔记本只有 4G 内存),VirtualBox 需要有许多多余的开支来管理每个子操作系统,Docker 在这方面是不一样的——容器共享同一个操作系统,更有可能是同样的二进制包文件和库文件,它可以运行在一台 Docker 主机上运行好几百个容器。

    由此可见,拿 docker和虚拟机相提并论是不恰当的。docker更像一个运行在宿主机器上的单纯的进程,它直接使用宿主环境的东西;而虚拟机则是一台完整的机器,尽管它是虚拟出来的。

    这里写图片描述

    2、启动速度快
    启动时间差了一个数量级,虚拟机:分钟级; docker:秒级。

    无论从启动时间还是从启动资源耗费角度来说。docker直接利用宿主机的系统内核,避免了虚拟机启动时所需的系统引导时间和操作系统运行的资源消耗。利用docker能在几秒钟之内启动大量的容器,这是虚拟机无法办到的。

    3、部署成本低
    在虚拟机之前,引入新的硬件资源需要消耗几天的时间。
    而安装虚拟机,仍然需要比较长的时间。
    Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。

    各种著名的软件为docker提供了支持,有相应的镜像文件,从官网下载,直接交给docker挂载运行就可以了。要用mysql数据库,再也不用安装mysql了。假如虚拟机,还是要安装mysql的。

    4、提高开发效率
    虚拟机是根据不同的硬件设施上设置不一样的配置,然后跑相同的软件;
    docker是同一份配置自动适应不同的硬件设施(将运行环境和配置放在代码中然后部署),然后跑相同的软件,这样就降低了硬件要求和应用环境之间耦合度。妈妈再也不同担心出现“在我机器上没问题”这种现象。

    四、缺点与不足
    1.资源隔离方面不如虚拟机,docker是利用cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。

    2.安全性问题。docker目前并不能分辨具体执行指令的用户,只要一个用户拥有执行docker的权限,那么他就可以对docker的容器进行所有操作,不管该容器是否是由该用户创建。比如A和B都拥有执行docker的权限,由于docker的server端并不会具体判断docker cline是由哪个用户发起的,A可以删除B创建的容器,存在一定的安全风险。

    3.docker目前还在版本的快速更新中,细节功能调整比较大。一些核心模块依赖于高版本内核,存在版本兼容问题

    4、docker是一个LINUX容器,它只能运行在linux。windows当然也可以安装,但骨子里还是linux。

    五、咋用
    前面讲过,利用镜像,就可以不用安装软件了,直接docker挂载运行。那么我猜测,用docker来部署,是这么两个步骤:
    1、制作镜像文件
    2、docker运行镜像,生成实例

    生成实例,不用耗什么时间,工夫都在制作镜像里。这个镜像怎么制作呢?还不知道。

    其次,docker声称一个镜像可以轻易地部署几百个实例。那我就有一个疑问了,假如是一个mysql镜像,实例在运行过程中,数据保存在哪里?是容器吗?虚拟机有对应的文件,里面的一切,都持久化在一些文件里,docker也是一样吗?

    告诉你,docker实例停止、释放以后,数据就没有了。这也太荒谬了吧。要持久化咋办?答案是挂载宿主机器上的文件到容器里。
    参考文章:
    使用Docker部署MySQL
    在 Docker 中使用 mysql

  • 相关阅读:
    洛谷P2894 [USACO08FEB]酒店Hotel
    codevs 3981 动态最大子段和
    舞蹈家怀特先生(线型)
    IOS8 通知中心(Notification Center)新特性
    WWDC2014 IOS8 APP Extensions
    IOS8 TouchID使用介绍
    IOS8 UIAlertController 弹框
    Unable to run Kiwi tests on iOS8 device
    registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later
    iOS开发---- 开发错误汇总及解决方法
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808663.html
Copyright © 2011-2022 走看看