📖 Scenario: You are working on a small Python project. You want to run your tests inside a Docker container to make sure they work the same way on any computer.
🎯 Goal: Build a Docker setup that runs Python tests inside a container using docker run.
📋 What You'll Learn
Create a Dockerfile that uses the official Python 3.12 image
Copy the test script into the container
Set a command to run the test script
Run the container and see the test output
💡 Why This Matters
🌍 Real World
Running tests inside containers ensures your code works the same on any machine, avoiding the 'it works on my computer' problem.
💼 Career
Many companies use containers to run tests in continuous integration pipelines, so knowing this helps you work in modern DevOps environments.
Progress0 / 4 steps
1
Create a simple Python test script
Create a file named test_script.py with a Python test function called test_addition that checks if 2 + 2 equals 4 and prints Test passed if true.
Docker
Hint
Write a function named test_addition that prints Test passed if 2 + 2 equals 4.
2
Write a Dockerfile to run the test script
Create a Dockerfile that uses the base image python:3.12-slim, copies test_script.py into the container, and sets the default command to run python test_script.py.
Docker
Hint
Use FROM python:3.12-slim and copy the test script to /app. Set CMD to run the script.
3
Build the Docker image
Write the exact docker build command to build an image named test-runner from the current directory.
Docker
Hint
Use docker build -t test-runner . to build the image.
4
Run the container to execute the tests
Write the exact docker run command to run the test-runner image and show the test output.
Docker
Hint
Use docker run --rm test-runner to run the container and see the output.
Practice
(1/5)
1. What is the main benefit of running tests inside Docker containers?
easy
A. It creates a clean and consistent test environment isolated from your local machine.
B. It makes tests run faster than on any other system.
C. It automatically fixes bugs in your code during testing.
D. It allows tests to run without writing any test commands.
Solution
Step 1: Understand container isolation
Docker containers run applications in isolated environments separate from the host system.
Step 2: Benefits for testing
This isolation ensures tests run in a clean, consistent environment every time, avoiding conflicts with local setup.
Final Answer:
It creates a clean and consistent test environment isolated from your local machine. -> Option A
Quick Check:
Container isolation = clean test environment [OK]
Hint: Think: containers keep tests separate from your computer [OK]
Common Mistakes:
Assuming containers speed up tests automatically
Believing Docker fixes code bugs
Thinking tests run without commands
2. Which of the following docker run commands correctly runs tests inside a container and removes the container after completion?
easy
A. docker run -it myapp pytest
B. docker run --name testcontainer myapp pytest
C. docker run -d myapp pytest
D. docker run --rm myapp pytest
Solution
Step 1: Understand the --rm flag
The --rm option tells Docker to remove the container after it finishes running.
Step 2: Match command to requirement
docker run --rm myapp pytest uses --rm and runs pytest inside the container, which fits the question.
Final Answer:
docker run --rm myapp pytest -> Option D
Quick Check:
--rm removes container after run [OK]
Hint: Use --rm to auto-remove containers after tests [OK]
Common Mistakes:
Using -d runs container detached, not suitable for tests
Forgetting --rm leaves stopped containers
Using --name does not remove container automatically
3. Given this command: docker run --rm -v $(pwd):/app -w /app python:3.12 pytest test_sample.py What will happen when you run it?
medium
A. Mounts the current directory but runs tests on the host machine, not inside the container.
B. Runs pytest on test_sample.py inside the container using the current directory code, then removes the container.
C. Starts a container but does not run any tests because pytest is missing.
D. Creates a container but keeps it running after tests finish.
Solution
Step 1: Analyze volume mount and working directory
The -v $(pwd):/app mounts current folder to /app in container; -w /app sets working directory inside container.
Step 2: Understand command execution
The container runs pytest test_sample.py inside /app, using the mounted code, then --rm removes container after.
Final Answer:
Runs pytest on test_sample.py inside the container using the current directory code, then removes the container. -> Option B
Quick Check:
Volume mount + pytest run + --rm = Runs pytest on test_sample.py inside the container using the current directory code, then removes the container. [OK]
Hint: Mount code and run tests inside container with --rm [OK]
Common Mistakes:
Thinking tests run on host, not inside container
Assuming container stays after tests
Ignoring volume mount effect
4. You run this command to test your app: docker run -v $(pwd):/app -w /app python:3.12 pytest But the container stays running after tests finish. What is the likely cause?
medium
A. The -w flag causes the container to hang.
B. The -v flag is incorrect and prevents container exit.
C. You forgot to add the --rm flag to remove the container after running.
D. pytest command is missing, so container never runs tests.
Solution
Step 1: Check container removal flags
Without --rm, Docker keeps the container stopped but present after run.
Step 2: Verify other flags
Volume mount and working directory flags do not affect container removal behavior.
Final Answer:
You forgot to add the --rm flag to remove the container after running. -> Option C
Quick Check:
Missing --rm = container stays [OK]
Hint: Add --rm to auto-remove containers after tests [OK]
Common Mistakes:
Blaming volume mount for container state
Thinking working directory affects container lifecycle
Assuming pytest missing causes container to stay
5. You want to run tests inside a container using your local code, but your tests require environment variables API_KEY and DEBUG=true. Which command correctly runs tests with these variables and cleans up after?
hard
A. docker run --rm -v $(pwd):/app -w /app -e API_KEY=12345 -e DEBUG=true python:3.12 pytest
B. docker run --rm -v $(pwd):/app -w /app -e API_KEY -e DEBUG=true python:3.12 pytest
C. docker run -v $(pwd):/app -w /app -e API_KEY=12345 -e DEBUG=true python:3.12 pytest
D. docker run --rm -v $(pwd):/app -w /app python:3.12 pytest API_KEY=12345 DEBUG=true
Solution
Step 1: Set environment variables correctly
Use -e VAR=value to pass environment variables with values into the container.
Step 2: Ensure container cleanup
The --rm flag removes the container after tests finish, keeping environment clean.
Final Answer:
docker run --rm -v $(pwd):/app -w /app -e API_KEY=12345 -e DEBUG=true python:3.12 pytest -> Option A
Quick Check:
Use -e VAR=value and --rm for env vars and cleanup [OK]
Hint: Pass env vars with -e VAR=value and add --rm [OK]
Common Mistakes:
Passing -e without values
Omitting --rm causing leftover containers
Appending env vars as command arguments
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.