Docker常用命令(三)——资源控制

大纲

如何为容器提供资源配额?

如何访问共享内存?

如何以特定用户身份运行程序?

如何控制容器对主机进行的更改?

1. 设置资源配额

1.1 内存限制

docker container run -d --name $containerName -m 256m $imageName:$tag

1.2 CPU限制

docker container run -d --name $containerName \
-m 256m \
--cpus 0.75 \            #最多使用0.75个CPU
$imageName:$tag

1.3 访问设备

docker container run -d --name $containerName \
--device /dev/video0:/dev/video0 \         #挂载video0设备
$imageName:$tag

2 共享内存

Docker默认为每个容器创建唯一的IPC命名空间。若要两个容器访问共用的共享内存

docker container run -d --name ipc_producer \
--ipc shareable \          #生产者指定ipc
$imagename:$tag

docker container run -d --name ipc_consumer \
--ipc container:ipc_producer \        #消费者访问生产者的ipc
$imagename:$tag

3 用户

3.1 使用运行时用户

docker container run -d --name $containerName \
--user nobody \                  #将运行时用户设置为nobody
$imageName:$tag
docker container run -d --name $containerName \
-u nobody:nogroup \                  #将运行时用户设置为nobody,运行时组为nogroup
$imageName:$tag

3.2 用户和卷

默认情况下,容器内的用户与主机系统上的用户共享相同的用户ID空间。即,主机上的root用户拥有的文件,挂载到容器中后,容器中的root用户也可以读取该文件。

echo "test read" > myfile              #主机上创建新文件

chmod 600 myfile                       #修改为只读

sudo chown root myfile                 #所有者为root

docker container run --rm -v "$(pwd)"/myfile:/test/myfile \      #挂载到容器中
-u root ubuntu:16.04 cat /test/myfile      # 使用容器中的root读取该文件

#输出 "test read"                      #能够读取

4 操作系统功能集

创建新容器时,Docker默认会删除大部分功能,只保留运行大多数程序必须且安全的功能。

4.1 删除某项功能集

docker container run --rm -u nobody \
--cap-drop net_raw \              #删除NEW_RAW功能集
ubuntu:16.04 \
/bin/bash -c "capsh --print |grep net_raw"

4.2 以完全特权运行容器

docker container run --rm \
--privileged \
ubuntu:16.04 capsh --print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值