Install
$ agentstack add skill-weisser-dev-awesome-opencode-docker-optimize ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
What I do
- Analyze existing Dockerfile for inefficiencies and security issues
- Produce an optimized version with multi-stage builds
- Maximize layer caching for faster builds
- Select minimal base images to reduce attack surface
- Apply security hardening best practices
When to use me
Use this skill when you need to:
- Optimize a Dockerfile for smaller image size or faster builds
- Harden a container image for production deployment
- Convert a single-stage Dockerfile to multi-stage
- Debug slow Docker builds or bloated images
- Review a Dockerfile for security best practices
Process
- Analyze: Read the existing Dockerfile and
.dockerignore
- Identify the application type and runtime requirements
- Note current base image and its size
- Check for anti-patterns (see checklist below)
- Optimize base image: Select the smallest viable base
alpinevariants for minimal footprintdistrolessfor production (no shell, no package manager)slimvariants as a middle ground- Pin exact image digest or version tag, never use
latest
- Implement multi-stage build: Separate build and runtime
```dockerfile # Build stage FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci --production=false COPY . . RUN npm run build
# Production stage FROM node:20-alpine AS production WORKDIR /app COPY --from=build /app/dist ./dist COPY --from=build /app/nodemodules ./nodemodules USER node EXPOSE 3000 CMD ["node", "dist/index.js"] ```
- Maximize layer caching: Order instructions by change frequency
- Copy dependency manifests first, install, then copy source
- Group rarely-changing instructions early in the Dockerfile
- Use
.dockerignoreto exclude unnecessary files
- Security hardening: Apply container security best practices
- Run as non-root user
- Drop all capabilities, add only what is needed
- Set
HEALTHCHECKinstruction - Avoid storing secrets in image layers
- Use
COPYinstead ofADDunless tar extraction is needed
- Validate: Verify the optimized image
- Compare image size before and after
- Confirm the application starts correctly
- Run a vulnerability scan on the final image
Anti-Pattern Checklist
- [ ] Using
latesttag for base image - [ ] Running as root user
- [ ] Installing unnecessary packages (build tools in production image)
- [ ] Copying entire context before installing dependencies
- [ ] Using
ADDwhenCOPYsuffices - [ ] Not using
.dockerignore - [ ] Storing secrets in
ENVorARGinstructions - [ ] Multiple
RUNcommands that should be combined - [ ] Not cleaning up package manager caches in the same layer
Optimization Targets
| Metric | Goal | |--------|------| | Image size | Reduce by 50%+ from naive build | | Build time (cached) | Under 30 seconds for source-only changes | | Security | No critical/high CVEs in base image | | Layers | Minimize total layer count |
Language-Specific Patterns
Java
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:21-jre-alpine
COPY --from=build /app/target/*.jar app.jar
USER 1001
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Go
FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /server .
FROM gcr.io/distroless/static
COPY --from=build /server /server
USER nonroot
EXPOSE 8080
ENTRYPOINT ["/server"]
Rules
- Always pin base image versions explicitly
- Never store secrets or credentials in the image
- Always run the final container as a non-root user
- Combine
RUNcommands to reduce layers and clean up in the same layer - Include a
.dockerignorethat excludes.git,node_modules, and build artifacts
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: weisser-dev
- Source: weisser-dev/awesome-opencode
- License: MIT
- Homepage: https://www.npmjs.com/package/@weisser-dev/awesome-opencode
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.