题外话 我个人的文档风格,不会一上来就讲什么专业名词、贴原理图、贴架构图、贴代码啥的。。。感觉这样会给人一种很大的入门门槛,会让很多人一开始就失去了学习的兴趣和信心(我不喜欢那样的“装逼”风格,虽然看似很牛B的样子,其实对于新手入门的朋友而言,是没有任何参考价值的)。 考虑到一些对于某一技术不太懂、或者刚刚接触的朋友,所以尽量会写的通俗易懂。
前言
学习docker技术之前呢,我们通过引入一个大家都经历过的开发场景,由此作为切入点,学习起来思路会很清晰明白。
传统项目开发部署的基本流程
这里只简单描述一下,项目发布的基本流程
本地开发+测试,没有问题的话,编译打包发布到测试环境
在测试环境中进行测试,测试完成后,发布到生产环境
在生产环境中进行最后的测试,如果没有问题,那么一切就OK了
存在什么问题?
我想100%的人都亲身经历过这样的事情 —— 在自己本地测试都没有问题,发布到测试环境、生产环境后,就出现问题了!搞得自己非常苦恼!非常纠结!到底是哪里出了问题呢?明明代码什么的都一样啊~
好吧,这里我就不仔细分析具体的原因是什么了,因为可能会有N种原因。
这里就列举一个比较常见的原因,就是:
- 本地开发环境与测试环境、生产环境上的软件环境配置,可能出现不一致的情况,导致有些时候相同的代码在不同的环境下运行会出现问题。
存在问题:不同机器上的软件环境不一致。(比较核心的问题)
再列举几个实际开发中遇到的情况:
- 公司在阿里云买了一台新服务器,要想能正常发布项目等,前提是需要在服务器上重新安装一些软件环境(比如jdk、tomcat等),在安装软件环境的过程中,很大几率会出现配置错误的情况;一些比较复杂的环境配置步骤会很多,很多人都记不清具体的步骤和命令,还得上网搜索……
存在问题:软件环境的配置繁多、命令记不清楚。
- 像jdk、tomcat等基础的环境搭建,都已经很熟练了,每次有新机器的时候,都要重新搭建,这样就造成了重复性工作、效率低下、配置繁琐麻烦、易出错等情况。
存在问题:重复性搭建软件环境、效率低下。
当然也会有其他的问题,这里就不多做说明了。
比较好的做法是什么样的?
举个例子: 比如你到了一家新公司工作,一般都会让你在电脑上安装开发环境(比如JDK等),这时候一个技术人员递给了你一个U盘,里面有很多安装文件以及资源,你直接插在自己电脑上,copy需要的软件安装就行了,无需重新下载软件。
上面的场景,比较好的一点是:不用在网上重新下载对应的软件,直接使用U盘里面已经有的软件进行安装就行了。而且,U盘中的软件可以进行版本更新以及提供给他人直接使用。多么方便。
所以,针对上面提到的开发过程中遇到的开发环境等问题,如果能做到只搭建一次环境,多次复用的话,就nice了!就不会出现环境不一致的问题,也不用重复搭建软件环境了。
有什么技术方案能解决这样的痛点吗?
技术方案
因此,Docker出现了!