一.什么是docker 什么是docker?想想怎么解释一波呢,让大家能一目了然呢。先来看下万能的百度百科的解释. 简短的一句话,说明了docker的一部分特性:开源,可移植,虚拟化,沙箱机制(隔离)。 开源意味着免费,意味着我们可以去看他的实现方法,内部机制,也就从另一方面体现了docker的安全。随着虚拟化的火热,docker这款轻量级的容器式虚拟化更像是一匹黑马一样在各个领域展露头角。docker社区活跃着各式各样的大佬大神,各大巨头公司也贡献出各种各样的解决方案,k8s,swarm等编排也应运而生,docker已经慢慢的占据主流,成为一个新的生态。 二.为啥docker这么火热 当我们要学习,使用一个东西的时候,要做的第一件事就是想想我为啥要用这东西呢?它有啥好处呢?用它有没有必要呢?那么我们就先来看下docker的优点 1. 更高效的利用系统资源 如果大家了解虚拟机的话,应该了解,我们在虚拟机上启动一个最小的centos7的系统,最快最快也需要三四秒左右。因为虚拟机是启动一个完整的操作系统,当你开启两个虚拟机时,实际占有资源的是两个操作系统。而docker技术实际基于内核去启动的你容器内的进程,而你一台机器上的docker是共用内核的。也就是说,虚拟机会产生多个内核文件来占据资源,而docker不管你启动多少都只是利用的宿主机内核文件。资源利用率可想而知 2. 持续集成与测试 docker在持续集成持续部署中有啥好处呢?下面我们先来构思一下这个场景:由于业务日益火爆,用户流量越来越大,原有机器逐渐扛不住并发,需要扩容。Ok,开始扩容吧,拿出你的部署文档,登上新买的机器,一顿操作,哦吼这机器没有gcc这样的依赖,好说yum一个,难不住你。哦吼这东西版本不对,没遇到过呀,不慌百度一波继续搞。哦吼,这个上次遇到过为啥按文档处理不对呢,研究研究。好了一天过去了扩容失败。。。而此时如果是docker呢,只需要拉下docker镜像,run起docker容器,验证验证没问题,上线!!!喝茶,舒坦的一匹。 3. 可移植性 可移植性,最简单的来说。现在流行的上云,把我们的应用搬到云上去,把我们的几个服务器扔回仓库去。现在任一家云平台都将docker融入到了自己的平台,并且还提供各种各样的支持。当你的应用封装成docker后,今天去这家,明天去这家,都会如鱼得水,部署飞快 4. 环境标准化和版本控制 环境问题是一直是一个诟病,当开发同学将自己的应用开发好,本地自测OK时,丢到环境中不一定就没问题。为什么呢?每个环境配置不一致,参数不一致。而docker呢,开发同学可以将自己代码在本地docker中自测,而测试环境生产环境一样运用同样的base镜像。从此,团队内估计会很少听到,“你环境有问题吧,为什么在我这就没问题!” 5. 隔离性 docker可以确保不同容器的资源是隔离的,假设我在一台机器上安装两个nginx,老办法是一个进A目录,一个进B目录。而如果使用docker,两个nginx在各自的容器中都安装在A目录里也无所谓,互不打扰,各自为政 6. 安全性 其实这个安全性是相对的。下面的docker的缺点中也会出现一个安全性的类别。首先在安全性上,docker各个容器因为隔离性的问题各自为政,当A容器被侵犯,被破坏时,对B容器的影响为0 1. 宿主要求 docker只能在64位系统上运行,32位无法正常运行,而且系统还需要支持cgroup和namespace等。不过现在32位系统也比较少了。 2. 不支持将Windows系统虚拟化 docker目前只能虚拟基于linux的服务。Windows的服务目前不支持 3. 容器数据丢失无法找回 如果你的容器没有做对应的数据卷,一旦容器删除,内容则凉凉 4. 无法逆向构建dockerfile dockerfile丢失或拿到一个镜像没有提供dockefile,逆向构建出dockerfile比较复杂,所以使用来路不明的基础镜像需要小心。(通过dockerfile构建的镜像容器能一定程度的逆向构建,关注我!!!!后面有文章介绍,嘿嘿嘿) 5. 安全性 docker设计上一定程度保护了docker容器的安全,但是宿主机对docker内部文件是可以毫无障碍查看读取删除的,也就是说,拥有宿主机的权限就可以对上面的docker为所欲为。 三.用docker需要注意什么? 其实这个话题现在讨论有点早,但是还是打算放在初识篇章里,如果一开始的学习中不注意一些东西,到后面很有可能养成一个不太完美的习惯,做出来的docker镜像也可能不尽人意,不仅不会提升部署维护的简单性,甚至到最后可能不如手动化部署 1. 不要让docker做成一个类似虚拟机的系统 2. 幂等性 容器要支持幂等性,即不管你这个容器是任务型容器,服务型容器,初始化容器都需要支持重启,容器层面重启不会对业务环境造成影响,并且可以正常启动 3. 可简易迁移性 这点需要注意是,一个服务的配置文件里,如果记录了ip这样的随着环境变动而会变动的值是,可以通过读取run时传入的值而自行变动,不能每次换环境就要重新做docker镜像,这样重复的工作会增加很多,得不偿失 4. 数据保存 前面也提到过,docker容器一旦被删除,里面的内容就会荡然无存。但是docker提供了数据卷的支持,当你的容器意外删除后,数据卷的目录数据依然会在宿主机上保存。我们在把数据卷目录通过nfs等文件系统的方案,就可以保证数据的不丢失。 四.docker和虚拟机 docker是容器式虚拟化,算是虚拟化圈中的新秀。而老牌虚拟机自从诞生以来就风靡全球。虚拟机本质上是模拟一台真实的操作系统,你可以虚拟出不同款式规格硬件,通过虚拟机管控其上面的虚拟机系统。而容器与虚拟机最大的区别在于,容器是共享主机系统的内核文件,硬件规格等都是遵循的主机系统。 那么docker到底会不会取代虚拟机成为,占据虚拟化的全部市场呢?个人认为他们是一种共存并生的关系。举例来说,当我们需要在多台服务器上运行多个产品服务时,我们可以用虚拟机,虚出各自最优的底层环境。一个产品多个组件的部署,则可以将其docker化。利用两者各自的优势来实现我们的最优环境(docker与虚拟机的区分介绍。网上有一篇很详细很全面的文章,有兴趣的朋友可以后台询问。不知道我直接贴这里会不会有问题,就先不贴出来了。) 五. 结语 “辰木运维”,现阶段主要写下现在流行的docker,k8s等运维技术,也会发布一些我们在使用,运维过程中可以用到的通用的脚本,工具。如果文章有哪些错误,欢迎后台留言纠正,也欢迎大家提出宝贵的建议,想法,需求。下一篇将会记录docker初识2,主要是docker架构等内容!!! |
|