How to use Docker Swarm secrets to store and rotate your SSL certificates with Nginx
in DevOps , Containerization

Docker Swarm has an excellent feature out of the box — Docker Swarm secrets. Using it you can easily keep your sensitive data like credentials, TLS certificates, etc.
In terms of Docker Swarm services, a secret is a blob of data, such as a password, SSH private key, SSL certificate, or another piece of data that should not be transmitted over a network or stored unencrypted in a Dockerfile or in your application’s source code. You can use Docker secrets to centrally manage this data and securely transmit it to only those containers that need access to it.
So, if we want to use it to store our certificates, at first we need a certificate. Here we have two options:
- Use self-signed certificate
- Buy SSL certificate
We will use self-signed:
~$ mkdir certs && sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./certs/nginx.key -out ./certs/nginx.crtCommand above generates certificate which expiration date is 1 year and place it in ./certs/ directory.
Now we have key and crt files and we already can use it. But besides it, we should always monitor the certificate expiration date. Sure there are a few ways to do it, but it is out of scope topic. Just keep in mind that you can use alerts (Prometheus + Blackbox exporter) of certificate expiration date to trigger your script which in its turn updates the secret with the certificate.
Now we need to create an nginx docker service with our certificate. Here is my docker-compose file with secrets section:
version: '3.4'
services:
ingress_nginx:
image: ingress_nginx
build:
context: .
ports:
- "80:80"
- "443:443"
networks:
- network
deploy:
mode: global
restart_policy:
condition: any
delay: 5s
update_config:
delay: 30s
parallelism: 1
failure_action: rollback
secrets:
- source: nginx_key
target: /etc/nginx/nginx.key
- source: nginx_cert
target: /etc/nginx/nginx.crt
secrets:
nginx_key:
file: ./certs/nginx.key
nginx_cert:
file: ./certs/nginx.crt
networks:
network:
driver: overlayYou should keep in mind that you cannot update docker secrets on the fly. It means that you should create a dummy secret every time and replace the old secret with a dummy secret. This is an example script how to update an existing secret:
# Create dummy secret
echo "<<< Creating dummy secret >>>"
docker secret create dummy_key nginx.key
docker secret create dummy_crt nginx.crt
# Delete old certificate and key from docker secret and replace them with dummy
echo "<<< Delete old certificate and key from service and replace them with dummy >>>"
docker service update \
--secret-rm ${stack}_nginx_key \
--secret-rm ${stack}_nginx_cert \
--secret-add source=dummy_key,target=/etc/nginx/nginx.key \
--secret-add source=dummy_crt,target=/etc/nginx/nginx.crt \
${stack}_ingress_nginx
echo "<<< Delete old certificate from secrets >>>"
docker secret rm ${stack}_nginx_key
docker secret rm ${stack}_nginx_cert
# Deploy service with new secrets
echo "<<< Create secret with new certificate and update service >>>"
docker stack deploy --compose-file docker-compose.yml $stack
# Delete dummy secrets
echo "<<< Delete dummy certificate >>>"
docker secret rm dummy_key
docker secret rm dummy_crtAfter script execution, we have updated the certificate inside nginx container.
Get similar stories in your inbox weekly, for free
Share this story:

Pavel Varfalameev, DevOps engineer @ Byndyusoft
DevOps engineer at Byndyusoft.com
Latest stories
Best Cloud Hosting in the USA
This article explores five notable cloud hosting offers in the USA in a detailed way.
Best Dedicated Hosting in the USA
In this article, we explore 5 of the best dedicated hosting providers in the USA: …
The best tools for bare metal automation that people actually use
Bare metal automation turns slow, error-prone server installs into repeatable, API-driven workflows by combining provisioning, …
HIPAA and PCI DSS Hosting for SMBs: How to Choose the Right Provider
HIPAA protects patient data; PCI DSS protects payment data. Many small and mid-sized businesses now …
The Rise of GPUOps: Where Infrastructure Meets Thermodynamics
GPUs used to be a line item. Now they're the heartbeat of modern infrastructure.
Top Bare-Metal Hosting Providers in the USA
In a cloud-first world, certain workloads still require full control over hardware. High-performance computing, latency-sensitive …
Top 8 Cloud GPU Providers for AI and Machine Learning
As AI and machine learning workloads grow in complexity and scale, the need for powerful, …
How ManageEngine Applications Manager Can Help Overcome Challenges In Kubernetes Monitoring
We tested ManageEngine Applications Manager to monitor different Kubernetes clusters. This post shares our review …
AIOps with Site24x7: Maximizing Efficiency at an Affordable Cost
In this post we'll dive deep into integrating AIOps in your business suing Site24x7 to …
A Review of Zoho ManageEngine
Zoho Corp., formerly known as AdventNet Inc., has established itself as a major player in …












