docker容器CPU核心限制(绑定内核)

多核CPU的服务器Docker还可以控制容器运行限定使用哪些CPU内核,可以使用--cpuset-cpus选项来使某些程序独享CPU核心,
以便提高其处理速度,对应的Cgroup文件为/sys/fs/cgroup/cpuset/docker/容器ID号/cpuset.cpus。
选项后直接跟参数0、1、2……表示第1个内核,第2个内核,第3个内核,与/proc/cpuinfoo中的标号相同。

使新建容器绑定第1~4的核心使用

docker run -itd --cpuset-cpus 0,1,2,3 centos:stress /bin/bash
或者
docker run -itd --cpuset-cpus 0-3 centos:stress /bin/bash
该容器内的进程只会在0,12,3,的CPU上运行

如果服务器有16个核心,那么CPU编号为0~15

查看容器中进程与CPU内核的绑定关系

docker exec 5cfdcba3 taskset -c -p 1
pid 1's current affinity list: 0-3	//容器内部第一个进程编号一般为1

尽量使用绑定内核的方式分配CPU资源给容器进程使用,然后再配合–cpu-shares选项动态调整CPU使用资源的比例。

### Docker 容器与本地环境的区别 #### 一、资源隔离程度不同 Docker容器利用Linux内核特性中的Namespaces来提供进程级别的隔离机制[^2]。这意味着每个容器拥有独立的网络栈、PID空间和其他系统视图,从而使得它们之间相互不可见也不干扰。 #### 二、文件系统的差异 容器内部运行着基于镜像创建出来的只读层加上可写入的工作目录组成的分层结构;而宿主机则维持正常的磁盘分区布局并挂载各种存储设备。当启动一个新的容器实例时,默认情况下它不会影响到外部的操作系统状态。 #### 三、性能开销对比 由于不需要模拟完整的硬件平台,所以相比于传统意义上的虚拟化技术而言,由Docker构建起来的应用封装形式具有更低的CPU占用率以及更少内存消耗,在某些场景下甚至可以达到接近原生执行效率的程度。 --- ### Docker 容器与本地环境的交互方法 #### 文件共享 可以通过定义卷(Volumes)的方式让两者间交换数据。例如下面这条命令会把当前目录映射至名为`webapp`的服务里边去: ```bash docker run -v $(pwd):/usr/src/app webapp ``` 这样做的好处是可以方便地调试应用程序代码而不必每次都重新打包新的版本上传送进去测试。 #### 网络通信 默认状态下每一个新产生的实例都会被分配有一个私有的IPv4地址连同对应的网关信息一起构成小型局域网的一部分。如果想要使外界能够访问到里面提供的HTTP服务,则需指定端口转发规则如下所示: ```bash docker run -p 8080:80 nginx ``` 上述指令表示将本机上的TCP协议第8080号监听位置绑定到了目标进程中所暴露出来的标准Web服务器接口之上。 #### 进程信号传递 有时候可能需要向正在运行的目标发送特定类型的中断请求比如停止或者重启之类的动作,这时就可以借助于CLI工具完成此类任务: ```bash docker stop my_container_name_or_id ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值