一、容器与镜像
1.1、容器:视图隔离,资源可限制,独立文件系统的进程集合
资源视图隔离(namespace) 如能看见部分进程,独立主机名等
控制资源使用率(cgroup)如2G内存大小,cpu使用个数等
独立文件系统(chroot)
管理虚拟机=管理基础设施:管理容器=直接管理应用本身
1.2、镜像:运行容器所需要的所有文件集合(k8s是云时代的操作系统,镜像就是操作系统的软件安装包)
dockerfile: 描述镜像构建步骤
changeset:构建步骤所产生的文件系统的变化。 changeset分层复用 目的是提分发效率,减少磁盘压力
有了dockerfile之后,可以通过docker bulid命令构建出所需要的应用,存储在本地。通过docker push 将本地镜像推到docker registry 镜像仓库中,这样就可以在生产环境或者测试环境上将相应的数据下载下来并运行
1.3、如何运行容器
1.从镜像仓库docker registry下载相应镜像
2.镜像下载完成后,使用docker images查看本地镜像,这里会给出一个完整的镜像,可以在列表中选中想要的镜像
3.选中后,docker run运行镜像来得到想要的容器。可以通过多次运行得到多个容器。一个镜像就相当于一个模板,一个容器就像一个具体的运行实例,所以镜像具有一次构建,到处运行的特点。
二、容器生命周期
2.1单进程模型
1、init进程生命周期=容器生命周期
当initial进程退出时,所有的子进程也会随之退出,这样也是为了防止资源的泄露。但是这样退出后,由于应用程序里面是有状态的,可能会产生一些重要数据,当一个容器被删除或者退出时,数据就会丢失。所以需要将容器所产生的重要数据持久化下来,持久化到指定目录,这个目录就叫数据卷。
2、运行期间可执行exec执行运维操作
2.2数据持久化
1、独立于容器生命周期
容器的创建,运行,停止,删除等操作都和数据卷没有任何关系。我们将数据卷挂载到容器内,这样容器就能将数据写入到相应的目录里面了
2、数据卷管理的两种方式
binds: 通过bind的方式,直接将宿主机的目录直接挂载到容器,这种方式比较简单,但会带来运维成本,因为其依赖宿主机的目录,需要对于所有的宿主机进行统一管理 docker volume : 直接将目录管理交给运行引擎
三、容器项目架构
moby容器引擎架构(略)
四、容器 vs VM
4.1、 VM
1.利用Hypervisor来模拟硬件资源(cpu,内存等),从而建立Guest OS
2.应用拥有Guest OS 所有资源, 每一个guest os都有一个独立的内核
3.更好的隔离效果,Hypervisor需要消耗更多资源
因为需要把一部分的 计算资源交给虚拟化,这样就很难充分利用现有的计算资源,并且每个Guest OS都需要占用大量的磁盘空间。同时这样的启动方式很慢
4.2、container
1.容器针对进程级别隔离,所以无需Guest OS,
只需要一个独立的文件系统提供所需要的文件集合即可。
2.启动时间更快
所有文件隔离是进程级别的,所以启动时间快于VM,而且所需的磁盘空间也小于VM
3.隔离消耗资源少,隔离效果弱于VM
因为是进程级别,所以隔离效果没有那么好
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)