2 DevOps与容器
了解容器
容器关键特征是隔离
资源隔离
当程序启动时,会消耗CPU时间、占用内存,链接到其依赖库,并可能写入磁盘、传输数据包和访问其他设备,所消耗的一切都是统一主机上的所有程序共享的资源
容器是将资源和程序隔离到单独的沙盒中
容器在操作系统层隔离应用程序,而基于VM的隔离是由操作系统实现(VM的实现是使用虚拟化引擎虚拟化硬件层,如果要在虚拟机上运行应用程序,则必须先安装完整的操作系统)
linux 容器概念
命名空间(namespace)
提供系统资源的逻辑分区,如挂载点mnt、进程ID(PID)、网络等
使用pid命名空间隔离,不同命名空间中的进程无法相互查看,如一进程占用大量系统资源(如内存),则可能导致系统内存不足变得不稳定
cgroup(控制组)
cgroup来限制资源使用,与命名空间一样,对不同类型的系统资源设置约束(限流)
容器交付
部署应用程序,常导致应用程序中断;可预构建虚拟镜像,每当更新系统或应用程序包时,更新构建完整的虚拟镜像,并进行相应部署;但会导致资源利用效率低,及其相关开销
可通过多个应用程序共享到虚拟机来解决,即资源管理
容器是适合这种部署需求的工具;只需要打包应用程序本身及其依赖库,镜像大小明显小于虚拟机,分发容器镜像比虚拟机更经济,容器是轻量级、自包含的、不可变的,可区分应用程序和基础设施的边界
容器入门
成熟容器引擎,如Docker、rkt
开放容器计划Open Container Initiative,OCI,制定一系列容器规范
容器生命周期
Docker镜像的层次结构:
容器和镜像之间的状态关系:
主机和三种网络模式之间的交互:
使用Dockerfile
多容器编排
越来越多的程序被打包到容器,需要处理多容器的工具
示例:容器堆积,需考虑启动顺序、如何处理随机组件崩溃、如何管理变量、如何扩展某些组件
Docker Compose
docker CE发行版中的内置工具,读取docker-compose.yml来运行定义容器