Hero Image
容器技术基础

为什么容器里只能跑“一个进程”? 为什么我原先一直在用某个JVM参数,在容器里就不好使了? 为什么kubernetes就不能固定IP地址?容器网络联不通又该如何去debug? Kubernetes中的StatefulSet和Operator到底什么区别?PC和PVC这些概念又该怎么用? Linux进程模型对容器本身的重要意义,控制器模式对整个K8s项目提纲挈领的作用? 从PaaS到K8s PaaS PaaS(Platform as a Service) 应用托管。 Docker镜像,其实就是一个压缩包,直接由一个完整的操作系统的所有文件和目录构成。 其实只打包了文件系统,不包括操作系统的内核。各种内核相关的模块或者特性支持完全依赖于宿主机。 通过docker build 打包镜像,docker run 运行镜像,docker run创建的沙盒,就是使用Linux Cgroups和Namespace机制创建出来的隔离环境。解决了应用打包这个根本性问题。 Swarm swarm 提供集群管理功能 单机docker项目 1docker run <container-name> 多机docker项目 1docker run -H 'swarm cluster API' <container-name> Fig 项目 Fig项目第一次在开发者面前提出了容器编排(Container Orchestration)的概念。 加入用户现在需要部署的是应用容器A、数据库容器B、负载均衡容器C,那么Fig就允许用户把ABC三个容器定义在一个配置文件中, 并且可以指定他们之间的关联关系,比如容器A需要访问数据库B。定义好之后,只需要执行一条非常简单的指令。 1fig up Fig就会把这些容器的定义和配置交给DockerAPI按照访问逻辑一次创建。而容器A和B之间的关联关系,也会交给docker的Link功能通过写入hosts文件的方式进行配置。更重要的是,你还可以在Fig的配置文件里定义各种容器的副本个数等编排参数。 Fig 项目被Docker收购后更名为Compose。 Libcontainer LibContainer -> RunC 以RunC为依据,制定容器和镜像的标准和规范。 OCI(Open Container Initiative), 意在将容器运行时和镜像的实现从Docker项目中完全剥离出来。 Containerd 容器运行时 进程隔离与限制 程序被执行起来,它就从磁盘上的二进制文件,变成了计算机 内存中的数据,寄存器里的值,堆栈中的指令、被打开的文件,以及各种设备的状态信息的一个集合。像这样一个程序运行起来后的计算机执行环境的总和,就是:进程。 对于进程来说,它的静态表现就是程序,一个二进制文件;而一旦运行起来,就变成了计算机数据和状态的总和,这就是进程的动态表现。 容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。对于大多数Linux容器来说, Cgroups是用来制造约束的主要手段, 而Namespace技术则是用来修改进程视图的主要方法。 隔离 1docker run -it busybox /bin/sh What is BusyBox?