236 lines
6.5 KiB
Docker
236 lines
6.5 KiB
Docker
# CI/CD Chaos Engine - Over-engineered Docker Container
|
|
# This Dockerfile demonstrates professional containerization with satirical over-engineering
|
|
|
|
# Multi-stage build with excessive optimization
|
|
FROM --platform=linux/amd64 alpine:3.18 as base-builder
|
|
|
|
# Set build arguments with ridiculous defaults
|
|
ARG CHAOS_LEVEL=5
|
|
ARG ROAST_INTENSITY=7
|
|
ARG BUILD_DATE=unknown
|
|
ARG GIT_COMMIT=unknown
|
|
ARG GIT_BRANCH=unknown
|
|
|
|
# Install way too many build dependencies
|
|
RUN apk add --no-cache \
|
|
bash \
|
|
curl \
|
|
wget \
|
|
git \
|
|
python3 \
|
|
python3-dev \
|
|
py3-pip \
|
|
py3-setuptools \
|
|
py3-wheel \
|
|
build-base \
|
|
musl-dev \
|
|
linux-headers \
|
|
openssl-dev \
|
|
libffi-dev \
|
|
yaml-dev \
|
|
json-c-dev \
|
|
curl-dev \
|
|
ca-certificates \
|
|
&& rm -rf /var/cache/apk/*
|
|
|
|
# Create build directory structure (excessive)
|
|
RUN mkdir -p /app/{src,scripts,config,docs,tests,logs,tmp,cache,backups,exports,imports,static,media,templates,data}
|
|
|
|
# Copy all files (because we're thorough)
|
|
COPY . /app/
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Install Python dependencies with excessive optimization
|
|
RUN python3 -m pip install --no-cache-dir --upgrade pip setuptools wheel && \
|
|
python3 -m pip install --no-cache-dir \
|
|
flask \
|
|
fastapi \
|
|
uvicorn \
|
|
requests \
|
|
pyyaml \
|
|
click \
|
|
rich \
|
|
prometheus-client \
|
|
structlog \
|
|
python-json-logger \
|
|
colorama \
|
|
tqdm \
|
|
psutil \
|
|
docker \
|
|
kubernetes \
|
|
boto3 \
|
|
azure-storage-blob \
|
|
google-cloud-storage \
|
|
redis \
|
|
psycopg2-binary \
|
|
pymongo \
|
|
elasticsearch \
|
|
sentry-sdk \
|
|
newrelic \
|
|
datadog \
|
|
slack-sdk \
|
|
email-validator \
|
|
bcrypt \
|
|
cryptography \
|
|
jwt \
|
|
python-dotenv \
|
|
httpx \
|
|
aiohttp \
|
|
async-timeout \
|
|
tenacity \
|
|
backoff \
|
|
retrying \
|
|
pydantic \
|
|
marshmallow \
|
|
cerberus \
|
|
voluptuous \
|
|
jsonschema \
|
|
tox \
|
|
pytest \
|
|
pytest-cov \
|
|
pytest-mock \
|
|
pytest-asyncio \
|
|
black \
|
|
isort \
|
|
flake8 \
|
|
mypy \
|
|
bandit \
|
|
safety \
|
|
semgrep \
|
|
pre-commit \
|
|
shellcheck \
|
|
hadolint \
|
|
yamllint \
|
|
markdownlint-cli2 \
|
|
gitlint \
|
|
commitizen \
|
|
conventional-pre-commit
|
|
|
|
# Second stage - optimization builder
|
|
FROM base-builder as optimizer
|
|
|
|
# Over-optimization steps
|
|
RUN find /usr/local/lib/python3.*/site-packages -name "*.pyc" -delete && \
|
|
find /usr/local/lib/python3.*/site-packages -name "*.pyo" -delete && \
|
|
find /usr/local/lib/python3.*/site-packages -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
|
|
|
|
# Remove unnecessary files (excessive cleanup)
|
|
RUN rm -rf /usr/local/lib/python3.*/site-packages/*.egg-info && \
|
|
rm -rf /usr/local/lib/python3.*/site-packages/*/tests && \
|
|
rm -rf /usr/local/lib/python3.*/site-packages/*/test && \
|
|
rm -rf /usr/local/lib/python3.*/site-packages/*/docs && \
|
|
rm -rf /usr/local/lib/python3.*/site-packages/*/examples
|
|
|
|
# Third stage - production build
|
|
FROM --platform=linux/amd64 alpine:3.18 as production
|
|
|
|
# Install only what we actually need (but still overkill)
|
|
RUN apk add --no-cache \
|
|
bash \
|
|
curl \
|
|
git \
|
|
python3 \
|
|
py3-pip \
|
|
py3-yaml \
|
|
py3-requests \
|
|
ca-certificates \
|
|
&& rm -rf /var/cache/apk/*
|
|
|
|
# Create non-root user with excessive configuration
|
|
RUN addgroup -g 1001 -S chaos && \
|
|
adduser -u 1001 -S chaos -G chaos && \
|
|
mkdir -p /app /tmp /var/log/chaos /var/run/chaos && \
|
|
chown -R chaos:chaos /app /tmp /var/log/chaos /var/run/chaos
|
|
|
|
# Copy from optimizer stage
|
|
COPY --from=optimizer /usr/local/lib/python3.*/site-packages /usr/local/lib/python3.*/site-packages
|
|
COPY --from=optimizer /usr/local/bin /usr/local/bin
|
|
|
|
# Copy application files
|
|
COPY --chown=chaos:chaos . /app/
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Create directories with excessive permissions
|
|
RUN mkdir -p /app/{scripts,config,logs,reports,artifacts,docs,cache,tmp} && \
|
|
chmod -R 755 /app && \
|
|
chmod -R 777 /app/{logs,cache,tmp}
|
|
|
|
# Set environment variables (over-engineered)
|
|
ENV CHAOS_LEVEL=${CHAOS_LEVEL:-5}
|
|
ENV ROAST_INTENSITY=${ROAST_INTENSITY:-7}
|
|
ENV CELEBRATION_MODE="full"
|
|
ENV DEVELOPER_CHALLENGE="true"
|
|
ENV PYTHONUNBUFFERED=1
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
ENV PYTHONPATH=/app
|
|
ENV LOG_LEVEL=INFO
|
|
ENV CHAOS_HOME=/app
|
|
ENV CHAOS_CONFIG=/app/config
|
|
ENV CHAOS_LOGS=/app/logs
|
|
ENV CHAOS_CACHE=/app/cache
|
|
ENV CHAOS_TMP=/app/tmp
|
|
ENV CHAOS_ARTIFACTS=/app/artifacts
|
|
ENV BUILD_DATE=${BUILD_DATE}
|
|
ENV GIT_COMMIT=${GIT_COMMIT}
|
|
ENV GIT_BRANCH=${GIT_BRANCH}
|
|
ENV CONTAINER_VERSION=1.0.0
|
|
ENV CONTAINER_BUILD=production
|
|
ENV HEALTH_CHECK_ENABLED=true
|
|
ENV METRICS_ENABLED=true
|
|
ENV TRACING_ENABLED=true
|
|
ENV DEBUG_MODE=false
|
|
ENV PRODUCTION_MODE=true
|
|
|
|
# Install entrypoint script
|
|
COPY docker/entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
# Create health check script
|
|
RUN echo '#!/bin/bash' > /app/healthcheck.sh && \
|
|
echo 'echo "🎪 CI/CD Chaos Container Health Check"' >> /app/healthcheck.sh && \
|
|
echo 'echo "Chaos Level: $CHAOS_LEVEL"' >> /app/healthcheck.sh && \
|
|
echo 'echo "Status: Operating with maximum chaos"' >> /app/healthcheck.sh && \
|
|
echo 'exit 0' >> /app/healthcheck.sh && \
|
|
chmod +x /app/healthcheck.sh
|
|
|
|
# Expose ports (overkill for this application)
|
|
EXPOSE 8080 9090 3000 5000 80 443
|
|
|
|
# Add labels (excessive metadata)
|
|
LABEL maintainer="CI/CD Chaos Team <chaos@example.com>" \
|
|
version="1.0.0" \
|
|
description="CI/CD Chaos Engine - Over-engineered DevOps Satire" \
|
|
chaos.level="${CHAOS_LEVEL}" \
|
|
roast.intensity="${ROAST_INTENSITY}" \
|
|
build.date="${BUILD_DATE}" \
|
|
git.commit="${GIT_COMMIT}" \
|
|
git.branch="${GIT_BRANCH}" \
|
|
architecture="amd64" \
|
|
os="alpine" \
|
|
python.version="3.11" \
|
|
docker.version="24.0" \
|
|
compliance="SOC2,ISO27001,GDPR,HIPAA" \
|
|
security.scan.date="2024-01-01" \
|
|
quality.gate="passed" \
|
|
test.coverage="98.5%" \
|
|
performance.rating="excellent"
|
|
|
|
# Health check (excessive but professional)
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
|
|
CMD ["/app/healthcheck.sh"]
|
|
|
|
# Volumes (excessive for this use case)
|
|
VOLUME ["/app/logs", "/app/cache", "/app/tmp", "/app/artifacts"]
|
|
|
|
# Switch to non-root user
|
|
USER chaos
|
|
|
|
# Entry point with excessive ceremony
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
|
|
# Default command
|
|
CMD ["python3", "-m", "http.server", "8080", "--directory", "/app"] |