📖 Scenario: You are working on a small web application that needs to use a secret password to connect to a database. To keep this password safe, you want to use Docker secrets instead of putting the password directly in your Dockerfile or environment variables.
🎯 Goal: Learn how to create a Docker secret, use it in a Docker service, and verify that the secret is available inside the container securely.
📋 What You'll Learn
Create a Docker secret with a specific password
Create a Docker service that uses the secret
Verify the secret is accessible inside the container
Print the secret content inside the container
💡 Why This Matters
🌍 Real World
Secrets management is critical in real projects to keep passwords, API keys, and tokens safe. Docker secrets help avoid exposing sensitive data in code or environment variables.
💼 Career
Understanding Docker secrets is important for DevOps roles to securely manage credentials in containerized applications and maintain best security practices.
Progress0 / 4 steps
1
Create a Docker secret with the password
Use the Docker CLI to create a secret named db_password with the exact value SuperSecret123!. Run the command echo "SuperSecret123!" | docker secret create db_password - in your terminal.
Docker
Hint
Use echo to send the password and pipe it to docker secret create with the secret name db_password.
2
Create a Docker service that uses the secret
Create a Docker service named secret_test using the alpine image. Add the secret db_password to the service with the option --secret db_password. Use the command docker service create --name secret_test --secret db_password alpine sleep 1000.
Docker
Hint
Use docker service create with --name secret_test and --secret db_password options. Use alpine image and run sleep 1000 to keep the container running.
3
Access the secret inside the running container
Find the container ID of the running secret_test service using docker ps. Then, execute a shell inside the container with docker exec -it <container_id> sh. Inside the container, read the secret file located at /run/secrets/db_password using cat /run/secrets/db_password.
Docker
Hint
Use docker ps --filter name=secret_test -q to get the container ID, then docker exec -it <container_id> sh to open a shell. Inside, use cat /run/secrets/db_password to see the secret.
4
Print the secret content from inside the container
Print the content of the secret file /run/secrets/db_password inside the container by running docker exec $(docker ps --filter name=secret_test -q) cat /run/secrets/db_password. This will display the secret password stored securely.
Docker
Hint
Use docker exec $(docker ps --filter name=secret_test -q) cat /run/secrets/db_password to print the secret directly from the running service container.
Practice
(1/5)
1. What is the main purpose of using docker secrets in a Docker environment?
easy
A. To securely store sensitive data like passwords outside of Docker images
B. To speed up container startup time
C. To increase the size of Docker images
D. To manage container networking settings
Solution
Step 1: Understand what secrets are
Secrets are sensitive data such as passwords or keys that should not be stored inside images or code.
Step 2: Identify the purpose of Docker secrets
Docker secrets provide a secure way to store and manage this sensitive data outside of images, making it available only to authorized services.
Final Answer:
To securely store sensitive data like passwords outside of Docker images -> Option A
2. Which of the following commands correctly creates a Docker secret named db_password from a file password.txt?
easy
A. docker secret create db_password password.txt
B. docker secret add db_password password.txt
C. docker secret new db_password password.txt
D. docker secret generate db_password password.txt
Solution
Step 1: Recall Docker secret creation syntax
The correct command to create a secret is docker secret create [name] [file].
Step 2: Match the command with options
docker secret create db_password password.txt matches the correct syntax exactly.
Final Answer:
docker secret create db_password password.txt -> Option A
Quick Check:
docker secret create = correct syntax [OK]
Hint: Use 'docker secret create' to add secrets from files [OK]
Common Mistakes:
Using 'add' instead of 'create'
Using 'new' or 'generate' which are invalid
Confusing secret commands with service commands
3. Given the following Docker service creation command:
docker service create --name myapp --secret db_password nginx
What happens to the secret db_password inside the running container?
medium
A. It is stored as an environment variable named DB_PASSWORD
B. It is printed in the container logs
C. It is mounted as a file in /run/secrets/db_password
D. It is embedded inside the container image
Solution
Step 1: Understand how Docker secrets are exposed
Docker secrets are mounted as files inside the container at /run/secrets/[secret_name].
Step 2: Analyze the options
It is mounted as a file in /run/secrets/db_password correctly states the secret is mounted as a file. Options A, B, and D are incorrect because secrets are not environment variables, not printed in logs, and not embedded in images.
Final Answer:
It is mounted as a file in /run/secrets/db_password -> Option C
Quick Check:
Secrets = files in /run/secrets [OK]
Hint: Secrets appear as files in /run/secrets inside containers [OK]
Common Mistakes:
Thinking secrets become environment variables automatically
Expecting secrets to be logged
Assuming secrets are inside the image
4. You run docker secret create mysecret secret.txt but get an error: Error: secret file secret.txt not found. What is the most likely cause?
medium
A. The secret already exists
B. The file secret.txt does not exist in the current directory
C. Docker daemon is not running
D. You used the wrong secret name
Solution
Step 1: Understand the error message
The error says the file secret.txt was not found, meaning Docker cannot locate the file to create the secret.
Step 2: Identify the cause
This usually means the file is missing or the path is incorrect. The file secret.txt does not exist in the current directory matches this cause. Other options do not relate to file not found errors.
Final Answer:
The file secret.txt does not exist in the current directory -> Option B
Quick Check:
File missing = secret create error [OK]
Hint: Check file path exists before creating secret [OK]
Common Mistakes:
Assuming secret name causes file error
Ignoring Docker daemon status
Thinking secret existence causes file not found
5. You want to update a secret api_key used by a running Docker service webapp. Which sequence of commands correctly updates the secret without downtime?
hard
A. Edit the secret file inside the running container
B. Directly overwrite the existing secret with docker secret update
C. Stop the service, delete the secret, create new secret with same name, then start service
D. Create new secret with a different name, update service to use new secret, then remove old secret
Solution
Step 1: Understand Docker secret immutability
Docker secrets cannot be updated directly; they are immutable once created.
Step 2: Update secret safely
The recommended way is to create a new secret with a new name, update the service to use this new secret, then remove the old secret to avoid downtime.
Step 3: Analyze options
Create new secret with a different name, update service to use new secret, then remove old secret follows this process. Directly overwrite the existing secret with docker secret update is invalid because docker secret update does not exist. Stop the service, delete the secret, create new secret with same name, then start service causes downtime. Edit the secret file inside the running container is impossible because secrets are mounted read-only.
Final Answer:
Create new secret with a different name, update service to use new secret, then remove old secret -> Option D
Quick Check:
Secrets immutable = create new and update service [OK]
Hint: Create new secret and update service to avoid downtime [OK]
Common Mistakes:
Trying to overwrite existing secret
Stopping service causing downtime
Editing secrets inside container
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.