写点什么

Docker 系列 _ 01_ 一念缘起

用户头像
编程三昧
关注
发布于: 1 小时前
Docker 系列 _ 01_ 一念缘起

人们只有在经历过诸多痛苦之后,才会相信这“缘分”的存在。而所有的“缘分”,只不过是事物发展的必然结果罢了。


前言

在生产环境配置日益复杂的今天,一套统一的、可移植的环境可能是很多从业人员梦寐以求的。所谓“需求引领市场”,在需求的催动下,解决方案的诞生也只是时间问题而已。

开发测试的苦

  • 搭环境

  • 换电脑

  • 写文档

  • 搞适配


所有程序代码的执行都需要依赖于具体的系统环境,所以,在项目开发之初,搭建相应的开发环境是必不可少的步骤。任何不以环境为根据的代码开发都是耍流氓。


如果是一开始就跟着项目走的话,那还好,至少环境都是逐步完善过来的。但要是中途加入的话,遇到复杂项目,那就别提了,说多了都是泪,光一个环境搭建都能搞得你腰酸背痛外加腿抽筋。


本人亲历:在项目做到一大半的时候,被借调去支援其他项目,历时大概三个月左右。回来后的状况可以用一句话来概括——一顿操作猛如虎,一看结果二百五!啥?!单点登录?时候加的?PG 库,怎么来的......配!配!配!当项目终于能正常跑起来的时候,我脑海中只有一个念头:项目别三月,见面不相识!


哎,听说最近有种新技术挺火的......试问你能忍得了这诱惑?我只相信,没有不喜欢“偷腥”的程序猿,忍得住才怪了(手动白眼)。又到了搭环境的时候了,左手 npm,右手 brew,还有什么搞不定的,“偷腥”成功的成就感那是相当爆棚啊!


等等,先别急着兴奋,骚年!我且问你两个问题:


- 1. 你主机中现在装了多少包?- 2. 有同事要跟你协同开发,你怎么给他搭建出一个跟你这一模一样的环境?
复制代码


嘿,我这主机中各种各样的包和服务都有,具体数目我都数不过来(一脸嘚瑟样)!至于协同开发,那还不简单,我写一个文档,只要按照文档一步步走下去,保证能配置出来!再或者,我配置一个虚拟机,有谁需要开发环境,我只要给他拷出一份虚拟机镜像不就完了。


嗯,我且不怀疑你永远能及时更新文档的毅力,也不质疑有些公司的电脑配置,在运行虚拟机之后,除了卡顿不知道还能干啥......我只想问你:你不觉得你主机目前的状态有点类似于“大杂烩”吗?说好的程序猿的条理性呢?有了条理,我们至少还能当斑马(搬码),没了条理,那只能作一团乱麻了!

运维管理的累

  1. 易出错

  2. 不一致

  3. 启动杂

  4. 效率低


作为运维人员,最常听到的一句话是什么?要我来说,绝对是“在我这里好好的,到你那里怎么就不行了呢?”最常说的一句话是什么?我想大概或许也是这句吧。


累死累活、加班加点地才搞定了部署的问题,还没来得及歇一口气,又有新的补丁包发过来了。得,还得拼命!


很多运维人员的真实写照大概是:不是在调环境,就是在调环境的路上。

出路

由于各种各样的原因,我们常常会把一件脑力活给干成体力活。愉悦感成就感没了不说,还得搭上黑眼圈和“地中海”。


直到这时,我们或许会感慨:还是”CV 大法“好!


古话说:穷则变,变则通。人啊,只有被逼到一定地步了,才会想着去改变,寻找出路,安逸的环境基本不可能滋养出”思变“的野心和欲望。眼看这体力跟不上了,头顶的光芒越发耀眼了,就知道该到了寻求改变的时候了。


那到底有没有”一次配置,终生受益“的解决方案呢?

虚拟机

首先,最容易想到的和接触最多的非虚拟机莫属。


虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。


虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。


(1)资源占用多


虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。


(2)冗余步骤多


虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。


(3)启动慢


启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。


既然虚拟机存在这么多缺点,那还有没有更好的解决方案呢?还真有,那就是 Docker 技术。


一念缘起,我与 Docker 的故事从此开始……

初识 Docker

就因为这样一个念头,我懵懵懂懂的走进了 Docker 的世界。


Docker 是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。总结一下就是:


  • Docker 是一个开源的软件部署解决方案;

  • Docker 也是轻量级的应用容器框架;

  • Docker 可以打包、发布、运行任何的应用。

Docker 的组成

一个完整的 Docker 由以下几个部分组成:


  1. DockerClient 客户端

  2. Docker Daemon 守护进程

  3. Docker Image 镜像

  4. DockerContainer 容器

Docker 的作用

Docker 的主要用途,目前有三大类。


**(1)提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。


**(2)提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。


**(3)组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

总结

以上就是我和 Docker “结识”的过程,以及对 Docker 的简单认知,也欢迎大家分享自己和 Docker 结缘的过程。


~


~ 本文完,感谢阅读!


~


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

发布于: 1 小时前阅读数: 2
用户头像

编程三昧

关注

学习有趣的知识,塑造有趣的灵魂! 2019.08.30 加入

还未添加个人简介

评论

发布
暂无评论
Docker 系列 _ 01_ 一念缘起