Best Practices 2025

本番環境で安全かつ軽量にコンテナを運用するための鉄則。

1. Multi-Stage Builds (マルチステージビルド)

ビルド環境(Node.jsなど)と実行環境(Nginxなど)を分けることで、イメージサイズを劇的に小さくします。

Dockerfile (Multi-Stage)
# Build Stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production Stage
FROM nginx:alpine
# Copy only built assets from builder stage
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

2. Security Checklist (Rootless)

  • 🛡️ Don't run as root: コンテナ内で `USER` 指定を忘れない。
  • 🔒 Read-Only Root Filesystem: 可能な限り書き込みを禁止する(`--read-only`)。
  • 📦 Minimal Base Images: `alpine` や `distroless` を使い、攻撃面を減らす。
  • 🚫 No Secrets in Env: 環境変数にパスワードを書かない(`docker secret` を使う)。