Skip to main content
Tools

Memcached Dockerfile

Dockerfile for tools projects

View on GitHub

Dockerfile Content

# ============================================================================
# Created by https://Dockerfile.io/
# TOOL-SPECIFIC TEMPLATE for Memcached
# Website: https://memcached.org/
# Repository: https://github.com/memcached/memcached
# ============================================================================

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# TEMPLATE OVERVIEW & USAGE NOTES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# • TEMPLATE TYPE: TOOL-SPECIFIC TEMPLATE
# • PURPOSE: Production-ready Memcached caching server
# • DESIGN PHILOSOPHY: Security-hardened with performance optimization
# • COMBINATION GUIDANCE: Combine with application frameworks for caching
# • SECURITY CONSIDERATIONS: Non-root user, minimal base image, network security
# • BEST PRACTICES: Memory limits, connection limits, monitoring
# • OFFICIAL SOURCES: Memcached documentation and Docker security guidelines

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PRODUCTION STAGE - Optimized Memcached server
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FROM memcached:1.6-alpine

# Build arguments for configuration
ARG MEMCACHED_USER=nobody
ARG MEMCACHED_GROUP=nogroup
ARG MEMCACHED_MEMORY=64
ARG MEMCACHED_CONNECTIONS=1024
ARG MEMCACHED_THREADS=4
ARG MEMCACHED_PORT=11211

# Environment variables for runtime
ENV MEMCACHED_USER=${MEMCACHED_USER} \
    MEMCACHED_GROUP=${MEMCACHED_GROUP} \
    MEMCACHED_MEMORY=${MEMCACHED_MEMORY} \
    MEMCACHED_CONNECTIONS=${MEMCACHED_CONNECTIONS} \
    MEMCACHED_THREADS=${MEMCACHED_THREADS} \
    MEMCACHED_PORT=${MEMCACHED_PORT}

# Labels for container metadata
LABEL maintainer="Dockerfile.io" \
      description="Memcached caching server" \
      version="1.6" \
      source="https://github.com/ronald2wing/Dockerfile"

# Create dedicated user for Memcached (already exists in base image)
# The memcached base image already runs as non-root

# Expose Memcached port
EXPOSE ${MEMCACHED_PORT}/tcp
EXPOSE ${MEMCACHED_PORT}/udp

# Health check for container orchestration
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD echo "stats" | nc localhost ${MEMCACHED_PORT} | grep -q "STAT"

# Default command with security and performance optimizations
CMD ["memcached", \
    "-u", "${MEMCACHED_USER}", \
    "-m", "${MEMCACHED_MEMORY}", \
    "-c", "${MEMCACHED_CONNECTIONS}", \
    "-t", "${MEMCACHED_THREADS}", \
    "-l", "127.0.0.1", \
    "-v"]

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# SECURITY HARDENED STAGE - Enhanced security configuration
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FROM memcached:1.6-alpine AS security-hardened

# Build arguments for security configuration
ARG MEMCACHED_USER=nobody
ARG MEMCACHED_GROUP=nogroup
ARG MEMCACHED_MEMORY=64
ARG MEMCACHED_CONNECTIONS=1024
ARG MEMCACHED_THREADS=4
ARG MEMCACHED_PORT=11211
ARG MEMCACHED_MAX_ITEM_SIZE=1m

# Environment variables for runtime
ENV MEMCACHED_USER=${MEMCACHED_USER} \
    MEMCACHED_GROUP=${MEMCACHED_GROUP} \
    MEMCACHED_MEMORY=${MEMCACHED_MEMORY} \
    MEMCACHED_CONNECTIONS=${MEMCACHED_CONNECTIONS} \
    MEMCACHED_THREADS=${MEMCACHED_THREADS} \
    MEMCACHED_PORT=${MEMCACHED_PORT} \
    MEMCACHED_MAX_ITEM_SIZE=${MEMCACHED_MAX_ITEM_SIZE}

# Labels for container metadata
LABEL maintainer="Dockerfile.io" \
      description="Security-hardened Memcached caching server" \
      version="1.6" \
      source="https://github.com/ronald2wing/Dockerfile"

# Expose Memcached port
EXPOSE ${MEMCACHED_PORT}/tcp
EXPOSE ${MEMCACHED_PORT}/udp

# Health check for container orchestration
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD echo "stats" | nc localhost ${MEMCACHED_PORT} | grep -q "STAT"

# Security-hardened command with additional protections
CMD ["memcached", \
    "-u", "${MEMCACHED_USER}", \
    "-m", "${MEMCACHED_MEMORY}", \
    "-c", "${MEMCACHED_CONNECTIONS}", \
    "-t", "${MEMCACHED_THREADS}", \
    "-l", "127.0.0.1", \
    "-I", "${MEMCACHED_MAX_ITEM_SIZE}", \
    "-o", "modern", \
    "-v"]

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# USAGE EXAMPLES & BEST PRACTICES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# USAGE EXAMPLES
# ==============
# 1. Basic Memcached deployment:
#    docker build -t memcached-server -f memcached.Dockerfile .
#    docker run -p 11211:11211 --name memcached memcached-server
#
# 2. Production deployment with custom memory allocation:
#    docker build --build-arg MEMCACHED_MEMORY=256 -t memcached-prod .
#    docker run -d -p 11211:11211 --restart unless-stopped --name memcached-prod memcached-prod
#
# 3. Development with mounted configuration:
#    docker run -it --rm -p 11211:11211 -v $(pwd)/config:/etc/memcached \
#      --name memcached-dev memcached-server
#
# 4. High-performance configuration:
#    docker build --build-arg MEMCACHED_MEMORY=512 --build-arg MEMCACHED_CONNECTIONS=4096 \
#      -t memcached-highperf .
#    docker run -d -p 11211:11211 --name memcached-highperf memcached-highperf
#
# 5. Multi-instance deployment:
#    # Instance 1
#    docker run -d -p 11211:11211 --name memcached-1 memcached-server
#    # Instance 2
#    docker run -d -p 11212:11211 --name memcached-2 memcached-server
#
# 6. Security-hardened deployment:
#    docker build --target security-hardened -t memcached-secure .
#    docker run -d -p 11211:11211 --name memcached-secure memcached-secure
#
# 7. Application integration with Express.js:
#    cat frameworks/express.Dockerfile tools/memcached.Dockerfile > Dockerfile
#    docker build -t express-with-cache .
#
# 8. Monitoring and metrics collection:
#    cat tools/memcached.Dockerfile patterns/monitoring.Dockerfile > Dockerfile
#    docker build -t memcached-monitored .

# BEST PRACTICES
# ==============
# • Security & Compliance:
#   - Run Memcached as non-root user to minimize security risks
#   - Use network segmentation to restrict access to trusted clients
#   - Implement proper firewall rules for Memcached port (11211)
#   - Regularly update Memcached versions for security patches
#
# • Performance & Optimization:
#   - Configure appropriate memory allocation based on workload requirements
#   - Optimize connection limits for concurrent client access
#   - Implement proper eviction policies for cache management
#   - Monitor cache hit/miss ratios for performance tuning
#
# • Development & Operations:
#   - Use named volumes for persistent configuration when needed
#   - Implement proper health checks for container orchestration
#   - Configure resource limits (CPU, memory) based on workload
#   - Set up monitoring and alerting for cache performance
#
# • Memcached-Specific Considerations:
#   - Understand Memcached's LRU (Least Recently Used) eviction policy
#   - Design key naming conventions for efficient cache organization
#   - Implement proper cache invalidation strategies
#   - Consider using consistent hashing for distributed cache deployments
#
# • Combination Patterns:
#   - Combine with frameworks/express.Dockerfile for Node.js applications
#   - Use with frameworks/django.Dockerfile for Python applications
#   - Integrate with patterns/monitoring.Dockerfile for performance monitoring
#   - Combine with patterns/security-hardened.Dockerfile for enhanced security
#   - Use with patterns/docker-compose.Dockerfile for multi-service deployments

Note: This file is fetched from GitHub and cached for 7 days.