How to Install and Use Docker Secrets Management on Ubuntu 22.04 LTS


Introduction

As a DevOps engineer, securely managing sensitive data such as database credentials, API keys, and encryption keys is crucial for maintaining the integrity and security of your systems. Docker Secrets Management simplifies this by allowing you to securely store, manage, and use secrets within your Docker containers, enhancing the overall security of your Docker-based applications. In this guide, we’ll walk you through the process of installing Docker and using its built-in Secrets Management feature on Ubuntu 22.04 LTS.


Prerequisites

Before starting, ensure you have:

  • Administrative access and permissions on your Ubuntu server
  • Docker installed (or the knowledge to install it)
  • A basic understanding of Docker and container concepts

Technical Implementation

Step 1: Install Docker

Start by installing Docker if it’s not already installed on your Ubuntu system:

sudo apt update && sudo apt install -y docker.io

Enable Docker to start at boot and start the Docker service:

sudo systemctl enable docker
sudo systemctl start docker

Verify that Docker is running correctly:

docker --version
docker run hello-world

Step 2: Initialize Docker Swarm Mode

Docker Secrets are only available when running Docker in Swarm mode. Initialize Swarm mode with the following command:

sudo docker swarm init

Step 3: Create a Docker Secret

To create a secret, use the docker secret create command. For example, to create a secret named db_password:

echo "my_secure_password" | sudo docker secret create db_password -

The secret is now securely stored in Docker and will only be available to services that need it.

Step 4: Create a Docker Compose File

Create a docker-compose.yml file that references the secret:

version: '3.8'

services:
  my-service:
    image: nginx:latest
    secrets:
      - db_password
    environment:
      - DB_PASSWORD_FILE=/run/secrets/db_password

secrets:
  db_password:
    external: true

Explanation:

  • version: ‘3.8’: Specifies the Docker Compose file format.
  • secrets: Lists the secret db_password as an external secret, meaning it has already been created outside the Compose file.
  • environment: Uses DB_PASSWORD_FILE to point to the file path where Docker mounts the secret inside the container.

Step 5: Deploy the Service Using Docker Compose

Deploy the service using Docker Compose:

sudo docker stack deploy -c docker-compose.yml my_stack

Verify that your service is running and that the secret has been properly mounted:

sudo docker service ls
sudo docker service ps my_stack_my-service

Step 6: Verify Secret Access

To ensure the secret is being used securely, you can access your container and check the mounted secret:

sudo docker exec -it $(docker ps -q -f name=my_stack_my-service) /bin/sh
cat /run/secrets/db_password

Note: Ensure that your application reads secrets using a secure method and does not expose them in logs or error messages.


Best Practices

  • Secure storage: Store secrets in a secure location such as HashiCorp Vault or integrate with Kubernetes Secrets if needed for larger systems.
  • Rotate secrets regularly: Periodically rotate secrets to minimize the risk of data leaks and ensure they remain secure.
  • Access control: Use role-based access control (RBAC) to limit who can create and access secrets in your Docker environment.
  • Audit and monitoring: Monitor the usage of secrets and implement logging to track access and modifications for compliance and security auditing.

Troubleshooting

  • Secrets not found: Verify that the secret has been created in Docker Swarm using docker secret ls.
  • Permission issues: Ensure that your service is configured correctly in the docker-compose.yml file and has permission to access the secret.
  • Environment variable not set: Check that your application reads from the /run/secrets/ directory and not directly from environment variables.

For further assistance, refer to Docker’s official secrets documentation or visit community forums for support.


Conclusion

In this guide, we covered the essential steps to install and use Docker Secrets Management on Ubuntu 22.04 LTS. By implementing Docker secrets, you can securely manage sensitive data in your Docker containers, enhancing the overall security of your applications. With best practices like secret rotation and secure access control, your infrastructure can be kept resilient and secure.

Next Steps:

  • Integrate Docker Secrets with CI/CD pipelines to automate secret management.
  • Explore advanced Docker Swarm and Kubernetes features for scaling secret management.
  • Implement logging and monitoring solutions to ensure secrets are used securely and compliantly.

Enhancing your secrets management strategy will empower you to build safer and more reliable containerized applications.