docker - run - ¿Cómo configuro los recursos asignados a un contenedor usando el acoplador?
download docker image (6)
Ahora puede asignar un número de recursos compartidos de CPU a un contenedor con la opción -c como se describe here
Como el título de esta pregunta sugiere, quiero establecer el uso máximo de disco / memoria y CPU para un contenedor usando la ventana acoplable (docker.io).
¿Hay alguna manera de hacer esto usando solo Docker?
Nota: PR 15078 está implementando (diciembre de 2015) soporte para cambiar recursos tanto para contenedor parado como para contenedor (posiblemente acoplador 1.10 o 1.11)
Decidimos permitir establecer lo que llamamos recursos, que consiste en thingg cgroup por ahora, de ahí el siguiente PR # 18073 .
Los únicos elementos mutables permitidos de un contenedor están en HostConfig y precisamente en Recursos (ver la struct ).
resources := runconfig.Resources{
BlkioWeight: *flBlkioWeight,
CpusetCpus: *flCpusetCpus,
CpusetMems: *flCpusetMems,
CPUShares: *flCPUShares,
Memory: flMemory,
MemoryReservation: memoryReservation,
MemorySwap: memorySwap,
KernelMemory: kernelMemory,
CPUPeriod: *flCPUPeriod,
CPUQuota: *flCPUQuota,
}
- El comando debe
set
.- Los cambios permitidos se pasan como indicadores: por ejemplo,
--memory=1Gb --cpushare=…
(como lo hace este PR).- Hay un indicador para cada atributo de la estructura de
Resources
(y no más, no menos).
Tenga en cuenta que la realización de cambios a través del docker set
debería persistir.
Es decir, esos cambios serían permanentes (actualizados en el JSON del contenedor)
Puede pasar solo el límite de memoria (es decir, límite de 5 MB: ejecución del acoplador -m = 5242880 ... imagen) como sé. Pero chicos de docker.io planearon agregar límites de CPU.
Solo una nota sobre -m / --memory
-
Si está configurando el límite de la memoria pero el contenedor no está asignando la cantidad de memoria que está tratando de reservar, acceda a las preferencias y ajuste la memoria que se reserva para la aplicación del acoplador como un todo.
Me encontré con este ''problema'' en OS X y no estaba seguro de por qué mi contenedor se estaba limitando a ~ 2G cuando estaba especificando --memory=8g
vea esta esencia: https://gist.github.com/afolarin/15d12a476e40c173bf5f
1) Usted da una parte relativa de la CPU con --cpu-share = ''relative-number''
2) ahora puedes poner límites duros a la CPU:
--cpuset=""
specify which cpus by numeric id, 0=first, n=nth cpu. specify by contiguous "1-5" or discontiguous "1,3,5" ranges.
si usa LXC en lugar del libcontainer predeterminado, también puede especificar esto en:
--lxc-conf=[]
(lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
RAM:
-m, --memory="" Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
Memoria / CPU
Docker ahora admite más opciones de asignación de recursos:
- Cuotas de la CPU, a través de la bandera -c
- Límite de memoria, a través de -m indicador
- Núcleos de CPU específicos, a través de --cpuset flag
Echa un vistazo a docker run --help
para más detalles.
Si utiliza lxc backend ( docker -d --exec-driver=lxc
), se pueden especificar esquemas de asignación de recursos más finos, por ejemplo:
docker run --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"/
--lxc-conf="lxc.cgroup.cpu.shares = 1234"
Almacenamiento
Limitar el almacenamiento es un poco más complicado en este momento. Por favor, consulte los siguientes enlaces para más detalles: