Virtual Machine 的工作是模拟出一台真实的 OS 系统,包含硬体操作,网路操作与软体运作,如果你要用虚拟机器,实作线上的环境,那么你可能需要建一台 VM 当资料库,一台 VM 当 Web Service ,一台 VM 当 Backend Service ,再建一台 VM 来跑 CronJob 与离线作业,总共是四台 VM ,你每建一台 VM ,就要分配给它一些硬碟空间跟 Memory,所需的资源会非常巨大。
而 Docker 是一个 Virtual Environment (VE) 的工具,Docker 不需要模拟一台真实的作业系统,Docker 会建立一个 Container ,每个 Container 的 image 与 application 是独立的,各 container 只需要执行必要的程式,不像 VM 必须实作一整台作业系统 ,Docker container 会真接使用 Docker Host 的资源(CPU, Memory),需要多少就使用多少,而也因为 Docker container 之间的资源是共享的,所以 Docker 的独立性没有 VM 这么高。
Docker 有多好用呢 ?
Docker 不只是虚拟环境这么简单,它做得跟 Git 很像,还支援 OS commit 功能,你可以将 container 有修改过的档案系统, commit 到 image 里,而下次再打开 container 时,就会直接回到上一次 commit 的状态,有了 commit 的过程,我们就可以有每台机器的历史记录,当系统出现问题或 Bug 时,也能很轻松的将系统还原,另外 Docker 可以建一个 Dockerfile 的设定档,透过 Dockerfile 我们可以重新建立一个新 image ,也就是说我可以将 Dockerfile 分享给我的同事,让我的同事也能快速的建立一个跟我一样的环境。
想想 100 个工程师的开发团队,每天每个人都在开发环境上的修改程式,哪一天环境突然坏了,要找到问题是非常的困难,有时还要去访问这 100 个人最近修改了什么,如果我们使用 Docker 来建立开发环境,就可以 20 分钟重新建立一个开发环境,另外使用 Docker 不用考虑硬体与 OS 的问题,省去了处理这两个问题,可以减少很麻烦,例如在 Ubuntu, RedHat, Debian, CentOS 等等不用 OS ,很容易会遇到 OS 不同,而程式有不同的执行结果。
以前我要复制一台 VM 的话 ,大约要花 二个小时,开启一台 VM 也要花个 30 秒以上,现在改用 Docker 之后,重制一个 Image 大约也只要 20 分钟,开启 container 不到 3 秒就完成了,真的方便很多。
Docker 可以用来做什么
- 自学/教学 - Docker 环境干净,又可以快速建立一个全新的 OS,学员也可以很容易的建立出跟老师一样的系统。
- OS Version control
- 摸拟线上环境,建立出自已的开发环境。
- 建立测试环境,测试不用版本的程式,是否能正常执行 unit test ,例如在 php4, php5, php7 中执行 unit test。
回應 (Leave a comment)