首页 > 其他分享 >docker使用的核心技术

docker使用的核心技术

时间:2023-08-21 18:22:21浏览次数:40  
标签:overlay 核心技术 宿主机 app1 目录 session 使用 docker folder

1.cgroup,这个用来限制cpu和内存;(通过改配置文件,让pid的cpu和内存限制在配置文件里指定的大小)

 

2.namespace,这个用来隔离进程/文件系统等等;(unshare -m -u /bin/bash,那么当前session就是在一个namespace里了,在这里修改hostname和加载iso文件,是不会影响宿主机的;注意:不止有-m -u还有其他隔离参数)

具体行为:在执行了unshare -m -u /bin/bash的session a里执行hostname可以看到此时的hostname是aaa(此时可以开启另外一个控制台即新的session b),在session a里执行hostname ns1即在隔离里修改hostname,然后执行hostname可以看到session a里确实改成了ns1,此时切换到session b可以看到session b即宿主机里hostname是没有修改为ns1的;(已经测试过不开启隔离修改hostname是会同时影响其他宿主机session)

第二个行为是:mount 1.iso /var/docker/app1_single_write_folder/iso1folder,然后mount |grep iso1folder可以看到挂载了,但是在宿主机session里是看不到的;

 

3.chroot,用于容器应用的根目录是隔离后的文件系统目录;

这里app1_single_write_folder如果里面是/bin,/lib,/opt这样的结构,则可以chroot到这个目录,实现docker应用真正和宿主机的文件系统隔离

,它应该是在开启隔离后再执行的,而cgroup是改的app1_single_write_folder里面的配置;chroot后就可以执行应用了;

 

4.overlay2,层叠文件,用于将多个目录“合并”为一个目录,使得一个容器应用的部分资源是可以复用的;

mount -t overlay overlay -o lowerdir=/var/docker/readonly1:/var/docker/readonly2,upperdir=/var/docker/app1_single_write_folder,workdir=/var/docker/app1_single_tmp_folder /var/docker/app1_overlay_merged_folder

最终在宿主机或namespace里mount|grep app1_overlay_merged_folder看到有个加载好的层叠目录,cd到app1_overlay_merged_folder(之前是空白目录,app1_single_tmp_folder工作目录也是空白目录),可以看到它是由只读目录和可写目录堆叠后的目录,往app1_overlay_merged_folder写数据最终是写到了app1_single_write_folder里;

流程是:在宿主机session里先创建一个overlay,即最终是app1_overlay_merged_folder,然后由于app1_single_write_folder里有volume_bbb,

这个时候仍然是在宿主机session里执行:mount --bind /var/host/volume_aaa /var/docker/app1_overlay_merged_folder/volume_bbb,注意这里是用的overlay的而非writedir里的,5里是writedir目录;

然后再通过unshare -m -u /bin/bash开启隔离,最终是这个顺序;

app1_single_write_folder是应用真正的数据目录,但是app1_overlay_merged_folder这个也算(但本质上是空目录,但umount后),因为开启overlay是在宿主机的session里;

5.mount --bind(VOLUME),容器可以挂载外部的文件系统,实现和宿主机文件系统交互。(这个有点忘了,应该是在开启namespace之前先将容器目录即写目录里的某个目录如aaa, aaa bind到宿主机里的其他目录上如/var/kkk,当开启namespace后以及overlay2后,往该aaa目录里写数据,最终在宿主机里/var/kkk里能看到这个数据)

具体是这样:在没有通过unshare开启mount隔离之前,先执行:

mount --bind /var/host/volume_aaa /var/docker/app1_single_write_folder/volume_bbb,然后在宿主机里mount|grep volume_bbb是可以看到的;

然后执行:unshare -m -u /bin/bash后开启了session a,在此session里用mount|grep volume_bbb也一样可以看到这个挂载;

然后在session a里往volume_bbb里写文件,在volume_aaa里可以看到(不管是在session a还是宿主机的),同样的在宿主机的session往volume_aaa里写了文件,在session a里查看volume_bbb也可以看到这个文件,这样就实现了Docker的VOLUME 隔离里访问宿主机的目录文件的效果;

【注意,按这个顺序mount --bind的挂载项,虽然宿主机和session a里都能看到,但是在session a里取消挂载是不会影响宿主机里的,而且退出session a后重新进入session a可以发现又自动挂载了】

 

6.整体流程:

一.先修改app1_single_write_folder目录里的sys/fs/cgroup/...里的相关内存和cpu限制配置,为后续执行应用时的限制做好准备;

二.在宿主机session里创建overlay挂载目录app1_overlay_merged_folder;

三.如果Dockerfile里有VOLUME,则将挂载overlay目录app1_overlay_merged_folder里的某个子目录(这个子目录真正是在app1_single_write_folder里的,但是要通过overlay目录挂载)挂载到宿主机其他目录里

四.再通过unshare -m -u /bin/bash开启namespace隔离;【也可能是先chroot再开启隔离】

五.然后chroot到app1_overlay_merged_folder里,此时/sys/fs/cgroup就是之前app1_single_write_folder/sys/fs/cgroup;

六.然后执行应用;

标签:overlay,核心技术,宿主机,app1,目录,session,使用,docker,folder
From: https://www.cnblogs.com/silentdoer/p/17645971.html

相关文章

  • this.$set的使用方法
    //对象的属性sex的值更新为"男"letobj={name:"六四",age:18,sex:"女"}this.$set(obj,"sex","男")//第一个参数是对象,第二个参数是更新的属性名称,第三个参数是新的内容//更新之后的obj是{name:"六四",age:18,sex:"男"}letarr=["星期一&qu......
  • linux上SQL Server 配置管理器的使用
    概述我们知道Windows平台上的SQLServer配置管理器是一个图形工具,用于管理与SQLServer关联的服务、配置SQLServer使用的网络协议以及管理SQLServer客户端计算机的网络连接配置。我们还可以使用SQLServer配置管理器来启动、暂停、恢复或停止服务,查看服务属性或更改服务......
  • Ubuntu使用apt管理安装软件包
    一、apt简介        apt是AdvancedPackagingTool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令可用于软件包的安装、删除、清理等,类似于Windows中的软件管理工具。  二、apt管理软件包的相关命令sudoapt-getupdate  更新源 ......
  • 了解AI智能问答的流程之后!使用起来更简单了
    AI智能问答流程主要是按照自然语言理解、对话管理、自然语言生成这3个步骤,通过这些步骤之后,就可以将语言进行转换,转换成计算机能够理解的意思,再根据当前对话管理判断应该采取的策略。接下来looklook会详细来讲讲具体是如何实现的。AI智能问答的流程1.自然语言理解问答机器人需要具......
  • docker compose install debian
    在Debian上安装DockerCompose需要遵循以下步骤:确保您的系统已经安装了Docker。安装Python和pip:sudoapt-getupdatesudoapt-getinstallpython3python3-pip使用pip安装DockerCompose:sudopip3installdocker-compose证DockerCompose是否安装成功:docker-......
  • docker ubuntu20.04 安装教程
    ubuntu20.04安装docker教程本博客测试安装时间2023.8月一、docker安装内容:dockerEngine社区版和dockerCompose二、安装环境:ubuntu20.04三、安装步骤:#如果已经安装过docker,请先卸载,没安装则跳过forpkgindocker.iodocker-docdocker-composepodman-dockercontai......
  • linux 下快速启动 webd 映射本地目录为网盘使用
    快速执行:curl-shttp://harbor.geoonline.geo:2015/tools/startup_webd.sh|bash可以跟两个参数,分别表示网盘根目录和http端口号 脚本如下:#!/bin/bashWEBD_ROOT="$1"WEBD_PORT="$2"WEBD_VERSION=$(curl-shttps://cnt2.cf/webd/changelog.txt|head-n1)WEB......
  • 全球网络加速器GA和内容分发网络CDN,哪个更适合您的组织使用?
    对互联网用户来说,提供最佳的用户体验至关重要:网页加载时间过长、视频播放断断续续以及服务忽然中断等问题都足以在瞬间失去客户。因此可以帮助提高您的网站或APP提高加载性能的解决方案就至关重要:全球网络加速器和CDN就是其中的两种解决方案。由于这两种服务都有一个共同的目标(提高......
  • 当字符串中含有%,先使用 encodeURI 进行编码,再使用decodeURI解码报错
    报错原因:decodeURI不允许参数有%,它会自动把%25转义为%,这个转义后的%导致的报错解决方法一在解码decodeURI之前将%替换为%25编码:url=encodeURI(encodeURI(url));解码:url=url.replaceAll("%","%25");url=decodeURI(decodeURI(url));解决方法二在编码encodeURI之前就将%......
  • 使用ITSM工具的10大优点
    无论业务规模如何,每个公司或组织都需要以某种方式进行IT服务管理,ITSM确保事件、服务请求、问题、更改和IT资产(还有一些IT服务的其他方面)等都得到简化的管理,那么使用ITSM工具就变得尤为重要!在ITSM中,IT团队可以采用ITIL的各种工作流程和最佳实践,有效的ITSM流程可以对IT组织的整体职......