Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 deployment or Docker Compose, or when no existing Dockerfile is present in the project.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 19% | 0% |
Write production-ready Dockerfile for general-purpose application projects.
npm start, python app.py)| Language | Dev Image | Prod Image | Size | |---|---|---|---| | 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 |
Got: Pick slim/distroless variant for production images.
dockerfileFROM 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"]
dockerfileFROM 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"]
dockerfileFROM 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"]
dockerfileFROM 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"]
dockerfileFROM 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"]
Got: docker build -t myapp . finishes without errors.
If fail: Check base image availability and dependency install commands.
| Directive | Purpose | Override | |---|---|---| | ENTRYPOINT | Fixed executable | Override with --entrypoint | | CMD | Default arguments | Override with trailing args | | Both | ENTRYPOINT + default args via CMD | Args override CMD only |
Use ENTRYPOINT for compiled binaries with single purpose. Use CMD for interpreted languages where might want docker run myapp bash.
text.git .gitignore node_modules __pycache__ *.pyc target/ .env .env.* *.md !README.md .vscode .idea Dockerfile docker-compose*.yml
Got: Build context drops dev artifacts.
Always run as non-root in production:
dockerfileRUN groupadd -r appuser && useradd -r -g appuser -m appuser USER appuser
For distroless images, use built-in nonroot user:
dockerfileFROM gcr.io/distroless/static:nonroot USER nonroot
bashdocker build -t myapp:latest . docker run --rm myapp:latest docker image inspect myapp:latest --format '{{.Size}}'
Got: Container starts, responds on expected port, runs as non-root.
If fail: Check logs with docker logs. Verify WORKDIR, COPY paths, exposed ports.
docker build finishes without errors.dockerignore drops unneeded files.env files baked into imagenode_modules or .git into build context wastes time and disk.latest tag for base images: Pin to specific versions (e.g., node:22.11.0) for reproducibility.--no-cache-dir: Python pip caches packages by default, bloating image.COPY unless need URL download or tar extraction (ADD auto-extracts).create-r-dockerfile - R-specific Dockerfile using rocker imagescreate-multistage-dockerfile - multi-stage patterns for minimal production imagesoptimize-docker-build-cache - advanced caching strategiessetup-compose-stack - orchestrate containerized app with other servicesOther measured skills in the registry, with their headline benchmark lift.