Docker 系列 _ 01_ 一念缘起

简介: 人们只有在经历过诸多痛苦之后,才会相信这“缘分”的存在。

人们只有在经历过诸多痛苦之后,才会相信这“缘分”的存在。


而所有的“缘分”,只不过是事物发展的必然结果罢了。


6.png


前言


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


开发测试的苦


  1. 搭环境
  2. 换电脑
  3. 写文档
  4. 搞适配


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


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


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


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


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


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


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


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


运维管理的累


  1. 易出错
  2. 不一致
  3. 启动杂
  4. 效率低


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


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


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


出路


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


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


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


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


虚拟机


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


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


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


(1)资源占用多


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


(2)冗余步骤多


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


(3)启动慢


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


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


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


初识 Docker


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


5.png


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 结缘的过程。


~ 本文完,感谢阅读!


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


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


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




相关文章
|
运维 Kubernetes Cloud Native
【k8s 系列】k8s 学习三,docker回顾,k8s 起航
【k8s 系列】k8s 学习三,docker回顾,k8s 起航
112 2
|
Linux 持续交付 虚拟化
【Docker】什么是Docker呢?本文带你洞悉
【Docker】什么是Docker呢?本文带你洞悉
112 2
|
Shell 应用服务中间件 Linux
|
Docker 容器
|
测试技术 Linux 应用服务中间件
docker是什么?docker能干嘛?dcokerfile计划第一期
docker是什么?docker能干嘛?dcokerfile计划第一期
113 0
|
监控 安全 关系型数据库
Docker从入门到上瘾
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Docker从入门到上瘾
|
Docker 容器
docker学习记录
学习整理记录
123 0
|
存储 Ubuntu 关系型数据库
一些docker的技巧和秘诀
关于docker容器和镜像的关系 无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像还是300MB。 但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜像。 dock top -- 显示容器中运行的进程 查看容器的root用户名和密码 docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1 因为docker
173 0
|
大数据 虚拟化 Docker
专访Docker大牛:Docker背后的真正引擎是Containerd
最近,我们可能经常会听到一种说法”Docker正在彻底改变IT!”这种说法是否存在炒作嫌疑呢?Docker对于现有格局的破坏性到底在哪里?Docker和虚拟机之间有什么区别?Docker真正的附加价值在哪里?本文我们将和Docker大牛Chanwit Kaewkasi来讨论这些话题。
1957 0