由来
场景:一个项目由于研发阶段不同,需要在不同物理服务器上分别部署,如开发环境、测试环境、生产环境,造成的问题:部署慢、成本高、资源浪费、难于迁移和扩展
虚拟机技术
一台物理机使用如VMware安装多个虚拟机,每个虚拟机都是一套完整的操作系统,需要分配系统资源,每个虚拟机可以单独部署一个app,这样一台物理机可以运行多个app。搭好虚拟机环境后给运维和测试clone即可。
好处:
1. 一定程度上避免资源浪费
2. 应用程序隔离,运行时独立且互不干扰
3. 可迁移
问题:
1. 操作系统过重,浪费内存
2. 操作系统启动时间缓慢
容器技术
与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
优点:
1. 容器更加轻量级,占用资源更少,可在同样规格的硬件上大量部署容器
2. 容器启动时间,几乎是瞬间启动
3. 资源隔离和限制
4. 易于部署和迁移
docker概念
- dockerfile,理解:源码
- image,理解:可执行程序
- container,理解:运行起来的进程
理解:dockerfile中指定需要哪些程序、依赖什么样的配置;
dockerfile经‘编译器’docker编译(docker build),生成可执行程序image;
运行image(docker run)就是container。
工作模式:docker使用CS架构,client处理输入的命令,如docker build,再转发给server执行。
核心命令:
1. docker build
2. docker run
3. docker pull(从仓库拉取第三方image)
底层实现:
NameSpace:一种资源隔离方案,该机制下各资源不再是全局的,属于特定的namespace,各NameSpace下的资源相互独立互不干扰。
Control groups:控制容器中进程对资源的访问和消耗,如内存、cpu、磁盘等,比如可以限制容器使用内存上限、可以在哪些CPU上运行。
参考学习:https://zhuanlan.zhihu.com/p/187505981