首页
学习
活动
专区
圈层
工具
发布

docker容器技术基础之linux cgroup、namespace

一、开头 接触过docker的同学多多少少听过这样一句话“docker容器通过linux namespace、cgroup特性实现资源的隔离与限制”。今天我们来尝试学习一下这两个东西。...可以实现每个容器的主进程为 1 号进程,而容器内的进程在主机上却拥有不同的PID。...否则容器外的cgroup 目录路径对容器中的进程可见。 简化了容器迁移等任务。 允许更好地限制容器化进程。可以挂载容器的 cgroup 文件系统,这样容器无需访问主机 cgroup 目录。...linux 5.7内核开始支持 参考地址:TIME_NAMESPACES(7) ---- 三、关于Cgroup 从上面我们了解到当我们要运行一个容器时,docker等应用会为该容器创建一组 namespace...启动容器时做的cpu限制参数--cpu-period、--cpu-quota实际上就是调整对应容器控制组的cpu配额。

1.7K10

Docker的cgroup讲解

---- 概念 cgroup ,控制组,它提供了一套机制用于控制一组特定进程对资源的使用。cgroup绑定一个进程集合到一个或多个子系统上。...cgroupfs是用户管理操纵cgroup的主要接口:通过在cgroupfs文件系统中创建目录,实现cgroup的创建;通过向目录下的属性文件写入内容,设置cgroup对资源的控制;向task属性文件写入进程...ID,可以将进程绑定到某个cgroup,以此达到控制进程资源使用的目的;也可以列出cgroup包含的进程pid。...但其它系统(比如cpusets,cpuacct),可以利用cgroup的这个功能实现一些新的属性,比如统计或者控制一个cgroup中进程可以访问的资源。...每行的格式hierarchy-ID:controller-list:cgroup-path,此截图中cgroup-path对应的容器id /sys/fs/cgroup/目录 cpuacct/cpuacct.usage_percpu

93510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    彻底搞懂容器技术的基石: cgroup

    为什么要关注 cgroup & namespace 云原生/容器技术的井喷式增长 自 1979年,Unix 版本7 在开发过程中引入 Chroot Jail 以及 Chroot 系统调用开始,直到 2013...容器技术其实很早就出现了,但为何在 Docker 出现后才开始有了较为显著的发展?早期的 chroot 、 Linux VServer 又有哪些问题呢?...cgroup 到目前为止,有两个大版本, cgroup v1 和 v2 。以下内容以 cgroup v2 版本为主,涉及两个版本差别的地方会在下文详细介绍。...这就是 cgroup v1 中的问题,在 cgroup v2 中就很好的进行了解决。 cgroup 和容器的联系 这里我们以 Docker 为例。...,当我们使用 Docker 创建出新的容器并且为他指定 CPU 和 内存限制后,其对应的 cgroup 配置文件的 cpu.max 和 memory.max都设置成了相应的值。

    2.5K31

    一篇搞懂容器技术的基石: cgroup

    1.1 云原生/容器技术的井喷式增长 自 1979年,Unix 版本7 在开发过程中引入 Chroot Jail 以及 Chroot 系统调用开始,直到 2013 年开源出的 Docker,2014 年开源出来的...cgroup 到目前为止,有两个大版本, cgroup v1 和 v2 。以下内容以 cgroup v2 版本为主,涉及两个版本差别的地方会在下文详细介绍。...这就是 cgroup v1 中的问题,在 cgroup v2 中就很好的进行了解决。 5. cgroup 和容器的联系 这里我们以 Docker 为例。...,当我们使用 Docker 创建出新的容器并且为他指定 CPU 和 内存限制后,其对应的 cgroup 配置文件的 cpu.max 和 memory.max都设置成了相应的值。...如果你想要对一些已经在运行的容器进行资源配额的检查的话,也可以直接去查看其对应的配置文件中的内容。 6. 总结 以上就是关于容器技术的基石之一的 cgroup 的详细介绍了。

    2.6K41

    修改docker镜像版本,容器大小缩小10%!

    个人IP:shigen是的,你看的没错:修改docker镜像的版本,我的容器大小缩小到了10%。效果如下:其中,1.0.0属于老版本。好的,进入正题。...「file-server」是一个开箱即用的局域网文件共享工具,扫码即可上传文件,点击即可下载文件也经过了多轮的更新,目前最新的版本是1.0.0,引入了docker容器,简化服务的部署。...为此,我特意查询了docker各个容器版本的区别:镜像版本特点 Alpine 轻量级,体积小,适合构建精简容器 Slim 基于 Debian,相对小巧,去除不必要软件包...下一个测试版本,包含最新软件包和库最终选择了alpine版本作为容器的基础镜像版本。...修改docker镜像版本重新构建docker build -t file-server:1.0.1 .构建过程稍微漫长,建议提前下载好基础的镜像版本再去构建。

    38510

    《Docker极简教程》--Docker容器--Docker容器的概念

    一、Docker容器的基本概念 1.1 Docker容器是什么? Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项。...1.2 Docker镜像与容器的关系 Docker镜像和容器之间有着密切的关系,它们是Docker技术中两个核心概念,相辅相成,共同构建了Docker容器化的环境。...Docker容器: Docker容器是Docker镜像的运行实例,它是一个独立的、可执行的进程,具有自己的文件系统、网络和进程空间。...容器可以通过预定义的镜像来快速部署应用程序,无需进行复杂的配置和安装过程。 版本控制和复制: Docker镜像提供了版本控制的功能,可以轻松地管理和复制镜像的不同版本。...用户可以通过标签、分支等方式对镜像进行版本管理,并在需要时快速回滚或切换到特定的版本。

    2.7K11

    Docker的容器

    容器的管理操作 容器常见的命令:查看、创建、启动、终止和删除 创建容器 docker create docker run 二者的区别在于docker create创建的容器处于停止状态,docker run...指定系统直接加centos,如果想要设置版本则需要centos:6.7 提示:Unable to find image 'centos:6.7' locally,则是因为当执行docker run命令后...版本 这样创建的交互容器通过ctrl+d或者exit命令退出该容器 容器只是停止并没有销毁,只是不再是运行状态 创建后台型容器 通过参数-d 既可以实现创建后台型容器 [root@docker ~]#...~]# 这里也可以验证docker ps 以及docker ps –a的区别 docker ps 显示的为正在运行的容器 docker ps –a 显示所有的容器 docker ps的其他参数: docker...查看容器日志 docker logs –f 容器名 可以查看容器的日志 参数: -tail 可以查看输入日志的行数 -f 将只需输入最新的日志 查看容器进程 docker top 容器名 可以查看容器中的进程

    1.3K70

    docker停止运行中的容器(docker关闭容器)

    问题描述: centos 启动一个容器添加了-d 参数,但是docker ps 或者docker ps -a查看却已经退出了 shell>docker run -d centos a44b2b88559b68a2221c9574490a0e708bff49d88ca21f9e59d3eb245c7c0547...shell>docker ps 退出原因 1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出 2、容器运行的命令如果不是那些一直挂起的命令( 运行top...,tail、循环等),就是会自动退出 3、这个是 docker 的机制问题 解决方案 方案1: 网上有很多介绍,就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行,那么容器就不会退出了,以...,还占用一个终端 方案2: shell>docker run -dit centos /bin/bash 添加-it 参数交互运行 添加-d 参数后台运行 这样就能启动一个一直停留在后台运行的Centos...shell>docker ps 容器运行起来了 进入容器的方法: 使用exec,不要使用attach命令 attach命令就是使用现有终端,如果你要退出容器操作,那么bash结束,容器也就退出了

    10.3K20

    docker容器的启动(docker容器启动时间)

    大家好,又见面了,我是你们的朋友全栈君。 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。...1、attach命令 attach命令是Docker自带的命令,命令格式为: docker attach [–detach-keys[=[]]] [–no-stdin] [–sig-proxy[...2、exec命令 Docker从1.3.0版本起提供了一个更加方便的exec命令,可以在容器内直接执行任意命令。...例如进入到刚创建的容器中,并启动一个bash: 可以看到,一个bash终端打开了,在不影响容器内其他应用的前提下,用户可以很容易与容器进行交互。...通过exec命令对容器执行操作是最为推荐的方式。 3、nsenter 工具 在util-linux软件包版本2.23+中包含nsenter工具。

    4.3K30

    这就是你日日夜夜想要的docker!!!---------Docker资源控制--Cgroup

    一、什么是 Cgroup? Docker通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。...Cgroup 子系统 blkio:设置限制每个块设备的输入输出控制; cpu:使用调度程序为 cgroup 任务提供 cpu 的访问; memory:设置每个 cgroup 的内存限制以及产生内存资源报告...创建镜像 三、实操 1、CPU弹性的加权值–cpu-shares 默认情况下,每个 Docker 容器的CPU的份额都是1024,单独一个容器的份额是没有意义的。...极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的 CPU 资源。 Cgroup 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。...[root@localhost ~]# docker exec -it 76994f5d310d bash //进入容器 [root@76994f5d310d /]# cat /sys/fs/cgroup

    2.9K10

    《Docker极简教程》--Docker容器--Docker容器的创建和使用

    可以使用docker pull命令来获取镜像,语法如下: docker pull : 其中,是要获取的镜像的名称,是可选的版本或标识符。...基本的语法如下: docker run [选项] : 其中,[选项]是可选的参数,用于配置容器的运行方式。:指定了要使用的镜像及其版本或标签。...四、Docker容器的部署与扩展 4.1 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。...注意事项 在部署之前,请确保所有节点上都已经安装了 Docker Engine,并且版本兼容。...以下是一些提高容器安全性的常见措施和最佳实践: 使用官方镜像 尽量使用官方的 Docker 镜像或信任的镜像仓库来获取容器镜像。官方镜像通常会定期更新和修复安全漏洞,以确保最新版本的安全性。

    15.1K00

    docker容器的概念

    Docker 架构: Docker 是一种容器实现方式,受到多家公司的支持,红帽在红帽 企业 Linux Atomic Host 平台中提供支持 Docker Hub 提供大量由社区开发的容器 Docker...内核: 容器由 Docker 从 Docker 格式的容器镜像创建,通过 Linux 内 核的若干功能相互隔离。...cgroup 对容器可以使用的系统资源加以限 制,防止一个容器占用主机上太多资源 SELinux:SELinux 是一种强制访问控制系统,防止容器互相影 响,同时防止主机受到容器的影响。...每个容器的 进程放入唯一的类别中,从而互相隔离 Docker 容器镜像: Docker 中每个容器由一系列层(layer)组成,组成虚拟文件系 统。...Docker 容器镜像具只读;添加的额外层会覆盖其内容,但不会更改。

    1.5K30

    Docker容器的使用

    4.1 启动容器 执行命令docker run即可启动容器,也就是创建某个镜像的实例。...docker容器与宿主机是隔离的,要想让容器内的程序能访问宿主机上的文件,需要通过-v参数将宿主机的文件挂载到容器中。...我的hello.py保存在主目录的/docker_test目录中,将这个目录挂载到容器的/docker_test目录,然后在容器内执行python /docker_test/hello.py: $ docker...事实上,docker的容器是非常轻量的,它并没有自己的网络,要想访问容器的端口,需要进行端口映射,将容器的某端口映射到宿主机的端口,客户端连接时,只要与宿主机的端口进行连接就可以了。...:容器ID IMAGE:镜像名称和版本 COMMAND:执行的命令 CREATED:容器创建时间 STATUS:容器的状态 PORTS:端口映射 NAMES:容器名

    44810

    Docker容器的管理

    docker run 镜像名称 这个过程可以理解为:把镜像文件创建成docker容器的一部分,然后再进行启动。特别需要注意的是:容器内的进程必须是前台运行状态,否则容器直接退出。...还有一点特别需要提醒的是:docker run 镜像名 如果镜像文件在本地不存在,就会在线去下载该镜像的资源信息。docker的容器启动成功后,使用docker ps -a可以查看容器的ID记录信息。...[root@wuyaShare ~]# docker container inspect b87b70fd99b5 #备注,执行后,就会显示该容器的详细的信息 容器中log查看 在docker...容器中,查看容器的日志信息的命令为: docker logs -f 容器ID 下面详细的演示下这部分的使用,具体为: docker run -it --rm centos:7.8.2003 bash...[root@wuyaShare ~]# docker port dc42dd7323a3 #启动容器,启动容器后,就可以查看容器的ID的信息了 [root@wuyaShare ~]# docker start

    1.2K20

    Docker的容器管理

    docker run centos:7.8.2003 ping baidu.com2、运行一个活着的容器,docker ps 可以看到的容器-d 参数,让容器在后台运行(针对宿主机而言)docer run...-d centos:7.8.2003返回容器ID3、丰富docker运行的参数4、查看容器日志docker ps docker logs -f 容器id 刷新日志docker logs 容器id...| tail -55、进入正在运行的容器空间内exec 指令用于进入容器内docker exec -it 容器id bash6、查看容器的详细信息,用于高级的调试docker container inspect...容器id7、容器的端口映射图片docker pull nginxdocker run -it nginx sh后台运行nginx容器,且起名字,且端口号映射宿主机的85端口,访问到容器内的80端口docker...,映射到容器内打开的端口docker run -d --name test_nginx -P nginx8、容器的提交docker run -it centos:7.8.2003 bash运行基础的centos

    1.1K20

    Docker 容器的网络

    如果你通过 Docker 提供的用户指南,你应该已经完成了构建你的第一个 Docker 容器,并且运行了示例应用。 你已经构建了你自己的镜像(images)。...本部分的内容将会指导你如何对你的容器进行网络配置。 使用默认网络来运行一个容器 Docker 能够支持通过 network drivers 来使用网络的容器。...除非你在运行的时候指定一个网络,否则 Docker 容器将会一直运行这个网络。...$ docker network disconnect bridge networktest 尽管你可以将容器从一个网络中断开连接,但是你不能删除 Docker 内部构建的被命名为 bridge 的 bridge...网络是将一个容器与其他容器独立开或者容器与其他网络独立开的最常规的方式。 因此,当你有更多使用 Docker 经验的时候,可以尝试创建你自己的网络。

    71000

    Docker容器的本质

    第一:其使用Linux提供的NameSpace技术来修改Docker容器进行时视图,实现每个容器有相互隔离的网络命名空间、进程空间等;比如你在Docker容器内查看进程列表,会发现容器自身是1号进程,...其并看不到操作系统视角的其他进程,比如每个docker容器看到的都是各自独立的文件系统,相互之间不会影响。...所以还需要使用Linux的Cgroup技术来实现容器对资源使用的限制。Linux Cgroups 的全称是 Linux Control Group。...它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。 总结:针对Linux内核的容器,比如Docker容器来说,其本质是一个特殊的进程。...相比其他进程其特殊在基于NameSpace技术实现了进程的视图的隔离,基于Cgroup技术实现了资源使用的限制,从而实现了容器之间的资源隔离与限制。

    46120

    docker容器技术系列六:docker容器的数据管理

    刚接触docker时总在思考两个问题: 1、docker容器如何实现将数据持久化呢?比如一个httpd容器中用户上传的文件或者访问日志等! 2、如何实现便捷的更新容器中的文件呢?...比如需要快捷的更新容器中的程序,总不能每次更新都build一次镜像吧! 那下面我们就来聊聊docker容器的数据管理:数据卷。...docker提供了两种方式实现数据管理: 1、映射宿主机目录或文件 2、通过创建一个专用的数据卷容器与相关容器间共享数据并实现持久化 一、数据卷的基本概念 数据卷是一个可供一个或多个容器使用的特殊目录,...可以使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.在一个 docker run 中可以多次使用 -v 参数来达到挂载多个数据卷的目的.我们现在在web应用容器中挂载单个卷。...如下创建一个新的容器: [root@node01 ~]# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash 然后解压备份文件到新容器的数据卷中

    1K80

    容器技术-Docker的优点

    那么如何高效的利用硬件资源实现云服务呢 容器技术,Docker最初是DotCloud公司在法国期间发起的一个公司内部项目,后再以Apache2.0授权协议开源,代码在Github上维护,Docker是基于...由于隔离的进程独立于宿主机和其他隔离的进程,也被称为容器。 图片 最初的Docker是基于LXC的,后来取出LXC转而使用自行开发的Libcontainer。...Docker被定义为为开源的容器引擎,可以方便的对容器进行管理,例如对镜像打包封装,引入Docker Registry对镜像统一管理。使用Docker就是为了创建容器,管理容器、使用容器、删除容器。...然而利用docker的容器-镜像技术,提供了除内核以外完整的运行环境,确保了应用环境的一致性。...容器之间相互隔离,且每个容器可以设置资源限额 提供轻量级虚拟化功能,容器就是在宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立、 当Docker容器多的时候,需要工具去编排管理,这个就是k8s。

    1.4K20

    查看Docker容器的信息

    对于运行在Docker环境的容器,有时我们想查询它们的一些基本信息,例如环境变量、hostname、ip地址等,接下来我们以一个tomcat容器为例,看看有哪些方式来取得这些信息; 原文地址:https...的tomcat容器: docker run --name tomcat001 -idt tomcat 执行docker ps检查一下,容器创建成功: root@maven:~# docker ps CONTAINER...exec命令 不用进入容器,直接在docker环境执行docker exec 容器名 容器内命令的方式也可以获取相关信息,举例如下: 获取容器的hostname:docker exec tomcat001...inspect命令 推荐使用docker inspect来获取信息,这个命令会返回一个json字符串,里面以key-value的格式准备了该容器相关的信息,内容十分丰富,可以一次性取得全部内容,也可以返回指定...JAVA_HOME=/docker-java-home/jre 至此,三种获取容器信息的方式已经全部列出,之所以在本文中推荐第三种,是因为有时我们会在shell脚本中获取容器信息,这时候用这种方式最为简单

    3.7K40
    领券