环境配置与部署
软件部署最大的麻烦之一,就是环境配置的不方便。一个独立的软件由于开发和运行所依赖的环境不一致,部署时可能会浪费很多没必要的功夫。想要从根本上解决问题,最简单粗暴的方法就是把软件与依赖的环境整个打包,复制到运行环境上。Docker 就是这样的一个解决方案。
Docker
Docker 将应用程序与该程序的所有依赖,都打包在一个文件里。运行这个文件,就能生成一个虚拟容器,程序便可以在其中运行,有了 Docker ,就不必再担心环境问题!
Docker 的用途
- 提供一次性的环境。比如,本地运行/测试别人的应用,持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。随开随关的特性,很适合云服务的动态扩容和缩容。
- 组建微服务架构。多个容器模拟多个服务器,在一台机器上就可以跑多个服务,模拟微服务架构的实施。
容器与镜像
Docker 基于两个十分重要的概念—— image 和 container。image 和 container 可以类比成面向对象中的类和对象,container 就是 image 运行起来的实例化。
为了管理镜像,还需要镜像仓库。仓库是集中存放镜像的地方,Docker 官方维护了公共仓库——Docker Hub,类似于 Github 之于版本控制的文件。
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含一条条构建镜像所需的指令和说明。
对比虚拟机
虚拟机同样也是容器化的一个方案,但实现方式上的大不同导致两者有着很大的区别
对比可以看到,
虚拟机 | Docker 容器 |
---|---|
硬件级进程隔离 | OS级进程隔离 |
一个VM带一个OS | 容器可共享OS |
分钟级启动 | 秒级启动 |
GB级大小 | 轻量级容器(KBs/MBs) |
现成的VM不好找 | 预构建的容器容易获取 |
移植性更好 | 容器会被摧毁和重建而不是移植 |
构建时间相对更久 | 秒级构建 |
需要使用更多资源 | 更少的资源使用 |