๐ Scenario: You are managing a small web application running inside Docker containers. Sometimes, the app uses too much memory or CPU, which slows down your computer and other apps. To keep everything running smoothly, you want to set limits on how much memory and CPU each container can use.
๐ฏ Goal: Learn how to set resource limits on Docker containers to prevent them from using too much memory or CPU. This helps keep your system stable and responsive.
๐ What You'll Learn
Create a Docker container running the official nginx image
Add memory and CPU limits to the container configuration
Run the container with these resource limits
Verify the container is running with the limits set
๐ก Why This Matters
๐ Real World
In real life, resource limits prevent one container from slowing down your whole system or crashing other apps.
๐ผ Career
Knowing how to set resource limits is important for DevOps roles to ensure applications run reliably in shared environments.
Progress0 / 4 steps
1
Create a Docker container running nginx
Write the Docker command to run a container named mynginx using the nginx image in detached mode.
Docker
Hint
Use docker run with -d for detached mode and --name mynginx to name the container.
2
Add memory and CPU limits variables
Create two variables: MEMORY_LIMIT set to 100m and CPU_LIMIT set to 0.5 to hold the memory and CPU limits for the container.
Docker
Hint
Use simple shell variable assignment like MEMORY_LIMIT=100m.
3
Run the container with resource limits
Write a Docker command to run the container named mynginx using the nginx image in detached mode, applying the memory limit from $MEMORY_LIMIT and CPU limit from $CPU_LIMIT.
Docker
Hint
Use --memory $MEMORY_LIMIT and --cpus $CPU_LIMIT options in the docker run command.
4
Check the container is running with limits
Write the Docker command to show the running containers and verify that mynginx is running.
Docker
Hint
Use docker ps to list running containers.
Practice
(1/5)
1. Why is it important to set resource limits like --memory and --cpus when running Docker containers?
easy
A. To prevent one container from using too many resources and slowing down the whole system
B. To make containers run faster by giving them unlimited resources
C. To allow containers to access the host's hardware directly
D. To automatically update the container software
Solution
Step 1: Understand resource limits purpose
Resource limits control how much CPU and memory a container can use to avoid overloading the host system.
Step 2: Identify the effect of limits
Setting limits prevents one container from hogging all resources, keeping the system stable for all containers.
Final Answer:
To prevent one container from using too many resources and slowing down the whole system -> Option A
Quick Check:
Resource limits = prevent overload [OK]
Hint: Limits protect system by capping container resource use [OK]
Common Mistakes:
Thinking limits make containers faster
Believing containers get direct hardware access
Confusing resource limits with software updates
2. Which of the following is the correct syntax to limit a Docker container's memory to 500MB and CPU to 1.5 cores?
easy
A. docker run --memory=500MB --cpus=1.5 myimage
B. docker run --mem=500 --cpu=1.5 myimage
C. docker run --memory-limit=500MB --cpu-limit=1.5 myimage
D. docker run --memory 500MB --cpus 1.5 myimage
Solution
Step 1: Recall Docker resource limit flags
The correct flags are --memory for memory and --cpus for CPU limits.
Step 2: Check syntax correctness
docker run --memory=500MB --cpus=1.5 myimage uses correct flags with equal signs and units, which is the proper Docker syntax.
Final Answer:
docker run --memory=500MB --cpus=1.5 myimage -> Option A
Quick Check:
Correct flags and syntax = docker run --memory=500MB --cpus=1.5 myimage [OK]
Hint: Use --memory and --cpus with = and units [OK]
Common Mistakes:
Using incorrect flag names like --mem or --cpu
Omitting equal signs between flag and value
Not specifying units for memory
3. What will happen if you run this command?
docker run --memory=100m --cpus=0.5 busybox sh -c "stress --vm 1 --vm-bytes 200m --vm-hang 0"
medium
A. The container will ignore the limits and run with full resources
B. The container will run normally without any issues
C. The container will use more CPU than allowed but not memory
D. The container will be killed because it tries to use more memory than allowed
Solution
Step 1: Analyze memory limit and stress command
The container is limited to 100MB memory but tries to allocate 200MB, which exceeds the limit.
Step 2: Understand Docker behavior on limit breach
Docker kills containers that exceed memory limits to protect the host system.
Final Answer:
The container will be killed because it tries to use more memory than allowed -> Option D
Quick Check:
Memory limit exceeded = container killed [OK]
Hint: Exceeding memory limit kills container [OK]
Common Mistakes:
Assuming container runs normally despite limit
Thinking CPU limits affect memory usage
Believing limits are ignored
4. You set --memory=256m on a container, but it still crashes with an out-of-memory error. What is the most likely cause?
medium
A. The container is using swap memory which is unlimited by default
B. The container is running on a host with too much free memory
C. The memory limit flag was misspelled and ignored
D. The CPU limit is too low causing memory errors
Solution
Step 1: Check common mistakes with memory limits
If the flag is misspelled, Docker ignores it and no limit is applied, causing crashes.
Step 2: Rule out other options
Swap is limited separately, host memory does not cause container crashes, and CPU limits do not cause memory errors.
Final Answer:
The memory limit flag was misspelled and ignored -> Option C
Quick Check:
Misspelled flag = no limit applied [OK]
Hint: Check flag spelling if limits don't work [OK]