-
自己写代码的环境叫做开发环境。
-
给测试去跑的环境叫做测试环境。
-
测试完可以对外使用的叫做生产环境。
其实我们在学习编程中,很多时间都浪费在“环境”上:
-
如果我现在重装了系统,我想要跑我的
war/jar
包,我得去安装一下JDK、Tomcat、MySQL等配置各种的环境变量才能跑起来。 -
开开心心地跟着博主给出的步骤去写Demo,但总是有Bug。(这里我将版本/依赖也归纳在环境的范畴里边)。
-
好不容易在测试环境下跑起来了,在生产环境就各种出错!
-
跟着教学视频做分布式/集群的项目,跑一堆的虚拟机,每个虚拟机都要安装对应的环境。
所以就有个笑话《千万不要跟程序员说,你的代码有bug》:
-
他的第一反应是你的环境有问题,第二就是你是傻逼不会用吧。
-
你要跟他这么说:“这个程序运行的怎么运行的跟预期不一样,是我操作有问题吗?”。
-
这货就会第一反应“我擦,这是不是出bug了?”
1.2应用之间需要隔离
比如我写了两个应用(网站),这两个应用部署在同一台服务器上,那可能会出现什么问题?
-
如果一个应用出现了问题,导致CPU占100%。那另一个应用也会受到关联,跟着一起凉凉了。
-
这两个应用是完全不同技术栈的应用,比如一个
PHP
,一个.NET
。这两个应用各种的依赖软件都安装在同一个服务器上,可能就会造成各种冲突/无法兼容,这可能调试就非常麻烦了。
二、Docker是如何解决上述的问题的
2.1解决环境(切换/配置)
不知道大家有没有装过系统,比如说装Linux虚拟机,重装Windows系统,都是需要镜像的。
有了这个镜像,我们就可以运行这个镜像,来进行安装系统的操作(此处省略N个下一步),于是我们的系统就装好了。一般来说,我们去官方渠道下载的镜像,都是纯净的。比如去官方下载Windows镜像,装完后之后桌面只有一个回收站。
但有过了解装系统的同学可能就会知道,有的镜像装完可能还有360这些软件,但系统的的确确是变了。简单来说,就是这些镜像添加了其他的东西(比如360软件、腾讯、千千静听等等软件)。
Docker也是这种思路,可以将我们的想要的环境构建(打包)成一个镜像,然后我们可以推送(发布)到网上去。想要用这个环 境的时候,在网上拉取一份就好了。
有了Docker,我们在搭环境的时候,跟以前的方式就不一样了。
-
之前:在开发环境构建出了一个war包,想跑到Linux下运行。我们得先在Linux下载好Java、Tomcat、MySQL,配置好对应的环境变量,将war包丢到Tomcat的webapps文件夹下,才能跑起来。
-
现在:在Linux下直接拉取一份镜像(各种环境都配好了),将镜像运行起来,把war包丢进去就好了。
将Docker的镜像运行起来就是一两秒的事情而已,十分方便的。
2.2解决应用之间隔离
说到这里,就得提出一个大家可能不认识的概念:LXC(Linux Containers)—>Linux容器。
2.2.1Linux容器
在Linux内核中,提供了 cgroups功能,来达成资源的区隔化。它同时也提供了名称空间( namespace)区隔化的功能, 使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。
简单来说就是:LXC是一个为Linux内核包含特征的用户接口。通过强大的API和简单的工具,它可以让Linux用户轻松的创建和托管系统或者应用程序容器。
2.2.2回到Docker
我们在翻看Docker的官方文档的时候,也很容易看见cgroup和namespace这两个名词:
来源维基百科:
Early versions of Docker used LXC as the container execution driver, though LXC was made optional in v0.9 and support was dropped in Docker v1.10.
lxc是早期版本docker的一个基础组件,docker 主要用到了它对 Cgroup 和 Namespace 两个内核特性的控制。新的Docker版本已经移除了对LXC的support。
2.2.3Docker在Windows和Mac
上面说了,Docker底层用的Linux的cgroup和namespace这两项技术来实现应用隔离,那Windows和Mac用户能用Docker吗?
-
之前,Windows和Mac使用Docker实际上就是跑了一层Linux虚拟机。
-
比如在Windows下安装的是
Docker Toolbox
,它需要Oracle Virtual Box
来跑Docker -
现在,Windows和Mac都已经原生支持Docker了。但需要一些安装的条件,详情可以查看官网
-
比如Windows:
Docker for Windows requires 64bit Windows 10 Pro and Microsoft Hyper-V
参考资料:
-
Windows 原生 Docker 正式商用
三、虚拟机和Docker
说到应用隔离和镜像,我就想起了 虚拟机。今年下半年(此处省略…),文体两开花(此处省略…),要是我写文章写得不好,我是需要向XX谢罪的。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!