Tools
RabbitMQ Dockerfile
Dockerfile for tools projects
Dockerfile Content
# ============================================================================
# Created by https://Dockerfile.io/
# TOOL-SPECIFIC TEMPLATE for RabbitMQ
# Website: https://www.rabbitmq.com/
# Repository: https://github.com/rabbitmq/rabbitmq-server
# ============================================================================
# docker build -t my-rabbitmq .
# docker run -p 5672:5672 -p 15672:15672 my-rabbitmq
#
# Combination Examples:
# cat tools/rabbitmq.Dockerfile \
# patterns/security-hardened.Dockerfile > Dockerfile
#
# cat tools/rabbitmq.Dockerfile \
# patterns/monitoring.Dockerfile > Dockerfile
#
# Security Note:
# - Uses specific RabbitMQ version for security
# - Secure default credentials (change in production!)
# - TLS/SSL support for encrypted connections
#
# Maintainer: Dockerfile.io
# ============================================================================
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# BASE IMAGE
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Official RabbitMQ image with management plugin
# Using specific version for reproducible builds
FROM rabbitmq:3.13-management-alpine
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# BUILD ARGUMENTS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Customize RabbitMQ installation
ARG RABBITMQ_VERSION=3.13.0
ARG ERLANG_VERSION=25.3.2
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# SECURITY CONFIGURATION
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Environment variables for secure configuration
ENV RABBITMQ_DATA_DIR=/var/lib/rabbitmq
ENV RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf
ENV RABBITMQ_CONF_ENV_FILE=/etc/rabbitmq/rabbitmq-env.conf
ENV RABBITMQ_LOGS=/var/log/rabbitmq
ENV RABBITMQ_SASL_LOGS=/var/log/rabbitmq/sasl.log
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PLUGINS AND EXTENSIONS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Enable additional plugins for production use
RUN rabbitmq-plugins enable --offline \
rabbitmq_management \
rabbitmq_management_agent \
rabbitmq_prometheus \
rabbitmq_peer_discovery_k8s \
rabbitmq_auth_backend_ldap \
rabbitmq_sharding \
rabbitmq_consistent_hash_exchange \
rabbitmq_event_exchange
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# CONFIGURATION FILES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Create configuration directory
RUN mkdir -p /etc/rabbitmq && \
chown rabbitmq:rabbitmq /etc/rabbitmq
# Copy configuration files
COPY rabbitmq.conf /etc/rabbitmq/
COPY definitions.json /etc/rabbitmq/
COPY enabled_plugins /etc/rabbitmq/
# Set permissions
RUN chown rabbitmq:rabbitmq /etc/rabbitmq/* && \
chmod 640 /etc/rabbitmq/*
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# SSL/TLS CONFIGURATION
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Create SSL directory and set up certificates (if provided)
RUN mkdir -p /etc/rabbitmq/ssl && \
chown rabbitmq:rabbitmq /etc/rabbitmq/ssl && \
chmod 750 /etc/rabbitmq/ssl
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# HEALTH CHECKS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Health checks for container orchestration
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD rabbitmq-diagnostics -q ping || exit 1
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PORTS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Expose RabbitMQ ports
EXPOSE 5672 # AMQP protocol
EXPOSE 15672 # Management UI
EXPOSE 15692 # Prometheus metrics
EXPOSE 25672 # Erlang distribution
EXPOSE 4369 # Erlang port mapper
EXPOSE 5671 # AMQP SSL
EXPOSE 15671 # Management UI SSL
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# VOLUMES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Data volumes for persistence
VOLUME ["/var/lib/rabbitmq", "/var/log/rabbitmq", "/etc/rabbitmq/ssl"]
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ENTRYPOINT
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Start RabbitMQ server
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rabbitmq-server"]
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# USAGE EXAMPLES & BEST PRACTICES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# USAGE EXAMPLES
# ==============
# 1. Basic RabbitMQ deployment:
# docker build -t rabbitmq-server -f rabbitmq.Dockerfile .
# docker run -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq-server
#
# 2. Production deployment with custom credentials:
# docker build -t rabbitmq-prod .
# docker run -d -p 5672:5672 -p 15672:15672 \
# -e RABBITMQ_DEFAULT_USER=admin \
# -e RABBITMQ_DEFAULT_PASS=securepassword \
# -v rabbitmq-data:/var/lib/rabbitmq \
# --restart unless-stopped --memory 2g --cpus 2 --name rabbitmq-prod rabbitmq-prod
#
# 3. Development with mounted configuration:
# docker run -it --rm -p 5672:5672 -p 15672:15672 \
# -v $(pwd)/config:/etc/rabbitmq \
# -v rabbitmq-dev-data:/var/lib/rabbitmq --name rabbitmq-dev rabbitmq-server
#
# 4. SSL/TLS enabled deployment:
# docker run -d -p 5671:5671 -p 15671:15671 \
# -v ./ssl:/etc/rabbitmq/ssl \
# -v rabbitmq-data:/var/lib/rabbitmq --name rabbitmq-tls rabbitmq-server
#
# 5. High-availability cluster deployment:
# # Node 1
# docker run -d -p 5672:5672 -p 15672:15672 \
# -e RABBITMQ_ERLANG_COOKIE=secret-cookie \
# -e RABBITMQ_NODENAME=rabbit@node1 \
# -v rabbitmq-data-1:/var/lib/rabbitmq --name rabbitmq-1 rabbitmq-server
# # Node 2
# docker run -d -p 5673:5672 -p 15673:15672 \
# -e RABBITMQ_ERLANG_COOKIE=secret-cookie \
# -e RABBITMQ_NODENAME=rabbit@node2 \
# -v rabbitmq-data-2:/var/lib/rabbitmq --name rabbitmq-2 rabbitmq-server
#
# 6. Monitoring stack with Prometheus:
# cat tools/rabbitmq.Dockerfile tools/prometheus.Dockerfile > Dockerfile
# docker build -t rabbitmq-monitoring .
#
# 7. Message processing pipeline:
# cat tools/rabbitmq.Dockerfile languages/python.Dockerfile > Dockerfile
# docker build -t rabbitmq-python-processor .
#
# 8. Complete messaging solution:
# cat tools/rabbitmq.Dockerfile patterns/microservices.Dockerfile > Dockerfile
# docker build -t messaging-microservices .
# BEST PRACTICES
# ==============
# • Security & Compliance:
# - Always change default credentials (guest/guest) in production
# - Use SSL/TLS encryption for network communication
# - Set secure Erlang cookie value and keep it confidential
# - Implement network policies to restrict access to RabbitMQ ports
# - Regularly update RabbitMQ and Erlang for security patches
#
# • Performance & Optimization:
# - Configure appropriate memory limits (RABBITMQ_VM_MEMORY_HIGH_WATERMARK)
# - Set disk free limits to prevent disk space exhaustion
# - Monitor queue depths and connection counts for performance tuning
# - Implement appropriate exchange types based on use case patterns
#
# • Development & Operations:
# - Use named volumes for persistent message storage
# - Implement proper health checks for container orchestration
# - Configure resource limits (CPU, memory) based on workload
# - Set up monitoring for queue depths, connection counts, and message rates
#
# • RabbitMQ-Specific Considerations:
# - Understand AMQP protocol and RabbitMQ's messaging patterns
# - Implement dead letter exchanges for error handling and message recovery
# - Set message TTL (time-to-live) where appropriate to prevent queue buildup
# - Implement queue length limits to prevent memory exhaustion
# - Use appropriate exchange types (direct, topic, fanout, headers)
#
# • Combination Patterns:
# - Combine with tools/prometheus.Dockerfile for metrics collection
# - Use with patterns/monitoring.Dockerfile for comprehensive monitoring
# - Integrate with patterns/security-hardened.Dockerfile for enhanced security
# - Combine with patterns/docker-compose.Dockerfile for multi-service deployments
# - Use with languages/python.Dockerfile for message processing applications