Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
create-dockerfile【部署与运维】Create general-purpose Dockerfiles for Node.js, Python, Go, Rust, and Java projects. Covers base image selection, dependency installation, user permissions, COPY patterns, ENTRYPOINT vs CMD, and .dockerignore. Use when containerizing an application for the first time, creating a consistent build/runtime environment, preparing an app for cloud deploym…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
書產備 Dockerfile 為標應案。
npm start、python app.py)| 語 | 發像 | 產像 | 寸 |
|---|---|---|---|
| Node.js | node:22-bookworm | node:22-bookworm-slim | ~200MB |
| Python | python:3.12-bookworm | python:3.12-slim-bookworm | ~150MB |
| Go | golang:1.23-bookworm | gcr.io/distroless/static | ~2MB |
| Rust | rust:1.82-bookworm | debian:bookworm-slim | ~80MB |
| Java | eclipse-temurin:21-jdk | eclipse-temurin:21-jre | ~200MB |
得: 產像擇 slim/distroless 變。
FROM node:22-bookworm-slim
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
USER appuser
EXPOSE 3000
CMD ["node", "src/index.js"]
FROM python:3.12-slim-bookworm
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER appuser
EXPOSE 8000
CMD ["python", "app.py"]
FROM golang:1.23-bookworm AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app/server ./cmd/server
FROM gcr.io/distroless/static
COPY --from=builder /app/server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
FROM rust:1.82-bookworm AS builder
WORKDIR /src
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release && rm -rf src
COPY . .
RUN touch src/main.rs && cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /src/target/release/myapp /usr/local/bin/myapp
EXPOSE 8080
ENTRYPOINT ["myapp"]
FROM eclipse-temurin:21-jdk AS builder
WORKDIR /src
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:21-jre
COPY --from=builder /src/target/*.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
得: docker build -t myapp . 無誤畢。
敗: 察基像可用與依裝令。
| 令 | 目 | 覆 |
|---|---|---|
ENTRYPOINT | 定執 | 以 --entrypoint 覆 |
CMD | 默引 | 以尾引覆 |
| 合 | ENTRYPOINT + CMD 之默引 | 引僅覆 CMD |
編譯單目用 ENTRYPOINT。解譯語可欲 docker run myapp bash 則用 CMD。
.git
.gitignore
node_modules
__pycache__
*.pyc
target/
.env
.env.*
*.md
!README.md
.vscode
.idea
Dockerfile
docker-compose*.yml
得: 構脈除發餘。
產時恆行為非 root:
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
USER appuser
distroless 像用內建 nonroot:
FROM gcr.io/distroless/static:nonroot
USER nonroot
docker build -t myapp:latest .
docker run --rm myapp:latest
docker image inspect myapp:latest --format '{{.Size}}'
得: 容器起、應於期口、非 root 行。
敗: 以 docker logs 察誌。驗 WORKDIR、COPY 路、露口。
docker build 無誤畢.dockerignore 除餘檔.env 不入像node_modules、.git 入構脈費時費碟latest:釘定版(如 node:22.11.0)為重現--no-cache-dir:Python pip 默快包、脹像COPY 除需 URL 下或 tar 解(ADD 自解)create-r-dockerfile - R 專 Dockerfile 用 rocker 像create-multistage-dockerfile - 多段模為最小產像optimize-docker-build-cache - 進快策setup-compose-stack - 以他服調容器化應