Set limits to docker containers, when using dokku
2022-03-13
If you're using Dokku and Docker for your project, in some cases your docker containers can syphon all the juice from your machine and it's not really fair for your other containers. They have feelings too, you know.
It's is fairly easy to do with Dokku, but depending on your base Operating System, it varies a little bit. If you look at the official documentation, there is a big and very useful warning:
Let me rephrase some of it like this : Values specified are dependent on the docker scheduler.
This scheduler can vary a bit from Operating System to another. So this article will talk about the default docker scheduler on Ubuntu 18.04 LTS.
You can set a good variety of limits:
- cpu
- memory
- memory-swap
- network-ingress
- network-egress
- nvidia-gpu
The cpu
limit is pretty easy to remember :
dokku resource:limit <your_app> --cpu 1
The memory
limit need a suffix :
dokku resource:limit <your_app> --memory 1g
According to the documentation, the default suffix is m
, for megabyte.
Documentation is a bit light on network-ingress
and network-egress
, but it seems to be as simple:
dokku resource:limit <your_app> --network-ingress 1g --network-egress 1g
For those unfamiliar with the terms, ingress
means incoming traffic, egress
means outgoing traffic.
At any time you can read your report
with dokku resource:report <your_app>
.
Very important
Don't forget that you need to restart your application for the new values to be applied.
dokku ps:restart <your_app>
It's also a good hygiene to do it, instead of having a bad surprise at the next automatic deploy of your <you_app>
.
Have fun!*