@hybridlabor-api/aos 4.8.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/.agents/{agents.md → AGENTS.md} +3 -1
  2. package/.agents/nodes.json +3 -1
  3. package/.agents/vendor-manifest.json +23 -1
  4. package/.claude/agents/godmode-media-eventtech.md +1 -1
  5. package/.claude/hooks/conventional-commits.mjs +125 -0
  6. package/.claude/hooks/env-file-protection.mjs +105 -0
  7. package/.claude/hooks/go-gate.mjs +101 -81
  8. package/.claude/hooks/memb-inject.mjs +29 -1
  9. package/.claude/settings.json +13 -0
  10. package/.claude/workflows/startcycle-dispatch.mjs +23 -1
  11. package/.opencode/agents/godmode-media-eventtech.md +1 -1
  12. package/.opencode/plugins/bdb-aos.js +31 -4
  13. package/CLAUDE.md +0 -571
  14. package/README.de.md +1 -1
  15. package/README.md +1 -1
  16. package/README.pt.md +1 -1
  17. package/THIRD_PARTY_NOTICES.md +126 -0
  18. package/bin/aos-doctor.mjs +1 -1
  19. package/docs/skills_table.md +1 -1
  20. package/installer.js +187 -55
  21. package/package.json +7 -3
  22. package/packages/aos-cli/README.md +80 -0
  23. package/packages/aos-cli/bin/aos-cli.mjs +134 -0
  24. package/packages/aos-cli/core-skills.json +12 -0
  25. package/packages/aos-cli/extensions/aos.ts +321 -0
  26. package/packages/aos-cli/package-lock.json +1923 -0
  27. package/packages/aos-cli/package.json +29 -0
  28. package/packages/aos-cli/scripts/check-theme.mjs +63 -0
  29. package/packages/aos-cli/themes/aos.json +97 -0
  30. package/scripts/build-plugin-manifest.mjs +131 -0
  31. package/scripts/validate-skills.mjs +81 -6
  32. package/skills/basic/ao-orchestrator/SKILL.md +116 -0
  33. package/skills/basic/bdb-eventagency-skill/SKILL.md +252 -0
  34. package/skills/basic/bdb-shipping-skill/SKILL.md +161 -0
  35. package/skills/basic/godmode-eventtech/SKILL.md +4 -1
  36. package/skills/global_config/agenttrail/SKILL.md +6 -1
  37. package/skills/global_config/aos-project-init/SKILL.md +2 -0
  38. package/skills/global_config/aos-project-init/assets/AGENTS.template.md +1 -1
  39. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +1 -1
  40. package/skills/global_config/aos-setup/SKILL.md +1 -1
  41. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
  42. package/skills/global_config/ask-tim/SKILL.md +7 -7
  43. package/skills/global_config/bash-script-generator/SKILL.md +201 -0
  44. package/skills/global_config/bash-script-generator/assets/templates/standard-template.sh +96 -0
  45. package/skills/global_config/bash-script-generator/docs/bash-scripting-guide.md +729 -0
  46. package/skills/global_config/bash-script-generator/docs/generation-best-practices.md +193 -0
  47. package/skills/global_config/bash-script-generator/docs/script-patterns.md +566 -0
  48. package/skills/global_config/bash-script-generator/docs/text-processing-guide.md +437 -0
  49. package/skills/global_config/bash-script-generator/examples/log-analyzer.sh +92 -0
  50. package/skills/global_config/bash-script-generator/scripts/generate_script_template.sh +123 -0
  51. package/skills/global_config/bash-script-generator/scripts/run_ci_checks.sh +172 -0
  52. package/skills/global_config/bash-script-generator/scripts/test_generator.sh +413 -0
  53. package/skills/global_config/bash-script-validator/SKILL.md +249 -0
  54. package/skills/global_config/bash-script-validator/docs/awk-reference.md +449 -0
  55. package/skills/global_config/bash-script-validator/docs/bash-reference.md +468 -0
  56. package/skills/global_config/bash-script-validator/docs/common-mistakes.md +623 -0
  57. package/skills/global_config/bash-script-validator/docs/grep-reference.md +395 -0
  58. package/skills/global_config/bash-script-validator/docs/regex-reference.md +391 -0
  59. package/skills/global_config/bash-script-validator/docs/sed-reference.md +454 -0
  60. package/skills/global_config/bash-script-validator/docs/shell-reference.md +463 -0
  61. package/skills/global_config/bash-script-validator/docs/shellcheck-reference.md +399 -0
  62. package/skills/global_config/bash-script-validator/examples/bad-bash.sh +55 -0
  63. package/skills/global_config/bash-script-validator/examples/bad-shell.sh +54 -0
  64. package/skills/global_config/bash-script-validator/examples/good-bash.sh +71 -0
  65. package/skills/global_config/bash-script-validator/examples/good-shell.sh +69 -0
  66. package/skills/global_config/bash-script-validator/scripts/run_ci_checks.sh +23 -0
  67. package/skills/global_config/bash-script-validator/scripts/shellcheck_wrapper.sh +174 -0
  68. package/skills/global_config/bash-script-validator/scripts/test_validate.sh +446 -0
  69. package/skills/global_config/bash-script-validator/scripts/validate.sh +512 -0
  70. package/skills/global_config/ci-pipeline/SKILL.md +135 -0
  71. package/skills/global_config/deja-memory/SKILL.md +3 -1
  72. package/skills/global_config/dispatching-parallel-agents/SKILL.md +170 -0
  73. package/skills/global_config/dockerfile-generator/SKILL.md +1038 -0
  74. package/skills/global_config/dockerfile-generator/examples/example.dockerignore +95 -0
  75. package/skills/global_config/dockerfile-generator/examples/golang-distroless.Dockerfile +34 -0
  76. package/skills/global_config/dockerfile-generator/examples/java-springboot.Dockerfile +45 -0
  77. package/skills/global_config/dockerfile-generator/examples/nextjs-production.Dockerfile +49 -0
  78. package/skills/global_config/dockerfile-generator/examples/nodejs-multistage.Dockerfile +55 -0
  79. package/skills/global_config/dockerfile-generator/examples/python-fastapi.Dockerfile +48 -0
  80. package/skills/global_config/dockerfile-generator/references/language_specific_guides.md +510 -0
  81. package/skills/global_config/dockerfile-generator/references/multistage_builds.md +570 -0
  82. package/skills/global_config/dockerfile-generator/references/optimization_patterns.md +492 -0
  83. package/skills/global_config/dockerfile-generator/references/security_best_practices.md +375 -0
  84. package/skills/global_config/dockerfile-generator/scripts/generate_dockerignore.sh +199 -0
  85. package/skills/global_config/dockerfile-generator/scripts/generate_golang.sh +172 -0
  86. package/skills/global_config/dockerfile-generator/scripts/generate_java.sh +185 -0
  87. package/skills/global_config/dockerfile-generator/scripts/generate_nodejs.sh +279 -0
  88. package/skills/global_config/dockerfile-generator/scripts/generate_python.sh +218 -0
  89. package/skills/global_config/dockerfile-generator/scripts/test_generator.sh +210 -0
  90. package/skills/global_config/dockerfile-validator/SKILL.md +300 -0
  91. package/skills/global_config/dockerfile-validator/examples/.dockerignore.example +34 -0
  92. package/skills/global_config/dockerfile-validator/examples/bad-example.Dockerfile +37 -0
  93. package/skills/global_config/dockerfile-validator/examples/golang-distroless.Dockerfile +50 -0
  94. package/skills/global_config/dockerfile-validator/examples/good-example.Dockerfile +52 -0
  95. package/skills/global_config/dockerfile-validator/examples/python-optimized.Dockerfile +53 -0
  96. package/skills/global_config/dockerfile-validator/examples/security-issues.Dockerfile +42 -0
  97. package/skills/global_config/dockerfile-validator/references/docker_best_practices.md +348 -0
  98. package/skills/global_config/dockerfile-validator/references/optimization_guide.md +473 -0
  99. package/skills/global_config/dockerfile-validator/references/security_checklist.md +208 -0
  100. package/skills/global_config/dockerfile-validator/scripts/dockerfile-validate.sh +699 -0
  101. package/skills/global_config/dockerfile-validator/scripts/test_validate.sh +35 -0
  102. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn-lock-read.Dockerfile +6 -0
  103. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn.Dockerfile +6 -0
  104. package/skills/global_config/dockerfile-validator/tests/fixtures/from-platform-nonroot.Dockerfile +7 -0
  105. package/skills/global_config/dockerfile-validator/tests/test_regression.sh +164 -0
  106. package/skills/global_config/finishing-a-development-branch/SKILL.md +228 -0
  107. package/skills/global_config/github-actions-generator/SKILL.md +353 -0
  108. package/skills/global_config/github-actions-generator/assets/templates/action/composite/action.yml +82 -0
  109. package/skills/global_config/github-actions-generator/assets/templates/action/docker/Dockerfile +25 -0
  110. package/skills/global_config/github-actions-generator/assets/templates/action/docker/action.yml +42 -0
  111. package/skills/global_config/github-actions-generator/assets/templates/action/docker/entrypoint.sh +27 -0
  112. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/action.yml +33 -0
  113. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/index.js +50 -0
  114. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/package.json +27 -0
  115. package/skills/global_config/github-actions-generator/assets/templates/workflow/basic_workflow.yml +242 -0
  116. package/skills/global_config/github-actions-generator/assets/templates/workflow/reusable_workflow.yml +106 -0
  117. package/skills/global_config/github-actions-generator/examples/README.md +147 -0
  118. package/skills/global_config/github-actions-generator/examples/actions/setup-node-cached/action.yml +93 -0
  119. package/skills/global_config/github-actions-generator/examples/caching/docker-buildkit.yml +256 -0
  120. package/skills/global_config/github-actions-generator/examples/security/dependency-review.yml +62 -0
  121. package/skills/global_config/github-actions-generator/examples/security/sbom-attestation.yml +119 -0
  122. package/skills/global_config/github-actions-generator/examples/triggers/chatops-commands.yml +475 -0
  123. package/skills/global_config/github-actions-generator/examples/triggers/repository-dispatch.yml +418 -0
  124. package/skills/global_config/github-actions-generator/examples/triggers/workflow-orchestration.yml +404 -0
  125. package/skills/global_config/github-actions-generator/examples/workflows/docker-build-push.yml +68 -0
  126. package/skills/global_config/github-actions-generator/examples/workflows/go-ci.yml +161 -0
  127. package/skills/global_config/github-actions-generator/examples/workflows/monorepo-ci.yml +340 -0
  128. package/skills/global_config/github-actions-generator/examples/workflows/multi-environment-deploy.yml +406 -0
  129. package/skills/global_config/github-actions-generator/examples/workflows/nodejs-ci.yml +122 -0
  130. package/skills/global_config/github-actions-generator/examples/workflows/python-ci.yml +157 -0
  131. package/skills/global_config/github-actions-generator/examples/workflows/scheduled-tasks.yml +376 -0
  132. package/skills/global_config/github-actions-generator/references/advanced-triggers.md +917 -0
  133. package/skills/global_config/github-actions-generator/references/best-practices.md +755 -0
  134. package/skills/global_config/github-actions-generator/references/common-actions.md +715 -0
  135. package/skills/global_config/github-actions-generator/references/custom-actions.md +320 -0
  136. package/skills/global_config/github-actions-generator/references/expressions-and-contexts.md +688 -0
  137. package/skills/global_config/github-actions-generator/references/modern-features.md +421 -0
  138. package/skills/global_config/github-actions-generator/scripts/test_generator.sh +344 -0
  139. package/skills/global_config/github-actions-templates/SKILL.md +7 -0
  140. package/skills/global_config/github-actions-validator/SKILL.md +576 -0
  141. package/skills/global_config/github-actions-validator/examples/README.md +88 -0
  142. package/skills/global_config/github-actions-validator/examples/outdated-versions.yml +76 -0
  143. package/skills/global_config/github-actions-validator/examples/valid-ci.yml +79 -0
  144. package/skills/global_config/github-actions-validator/examples/with-errors.yml +47 -0
  145. package/skills/global_config/github-actions-validator/references/act_usage.md +233 -0
  146. package/skills/global_config/github-actions-validator/references/action_versions.md +122 -0
  147. package/skills/global_config/github-actions-validator/references/actionlint_usage.md +343 -0
  148. package/skills/global_config/github-actions-validator/references/common_errors.md +512 -0
  149. package/skills/global_config/github-actions-validator/references/modern_features.md +384 -0
  150. package/skills/global_config/github-actions-validator/references/runners.md +317 -0
  151. package/skills/global_config/github-actions-validator/scripts/install_tools.sh +113 -0
  152. package/skills/global_config/github-actions-validator/scripts/validate_workflow.sh +910 -0
  153. package/skills/global_config/github-actions-validator/tests/test_validate_workflow.sh +237 -0
  154. package/skills/global_config/makefile-generator/SKILL.md +614 -0
  155. package/skills/global_config/makefile-generator/assets/templates/.gitkeep +1 -0
  156. package/skills/global_config/makefile-generator/docs/makefile-structure.md +530 -0
  157. package/skills/global_config/makefile-generator/docs/optimization-guide.md +784 -0
  158. package/skills/global_config/makefile-generator/docs/patterns-guide.md +642 -0
  159. package/skills/global_config/makefile-generator/docs/security-guide.md +361 -0
  160. package/skills/global_config/makefile-generator/docs/targets-guide.md +642 -0
  161. package/skills/global_config/makefile-generator/docs/variables-guide.md +596 -0
  162. package/skills/global_config/makefile-generator/scripts/add_standard_targets.sh +539 -0
  163. package/skills/global_config/makefile-generator/scripts/generate_makefile_template.sh +690 -0
  164. package/skills/global_config/makefile-generator/test/test_helper_scripts.sh +190 -0
  165. package/skills/global_config/makefile-validator/SKILL.md +244 -0
  166. package/skills/global_config/makefile-validator/docs/bake-tool.md +1000 -0
  167. package/skills/global_config/makefile-validator/docs/best-practices.md +858 -0
  168. package/skills/global_config/makefile-validator/docs/common-mistakes.md +944 -0
  169. package/skills/global_config/makefile-validator/examples/bad-makefile.mk +77 -0
  170. package/skills/global_config/makefile-validator/examples/good-makefile.mk +103 -0
  171. package/skills/global_config/makefile-validator/scripts/test_validate.sh +382 -0
  172. package/skills/global_config/makefile-validator/scripts/validate_makefile.sh +712 -0
  173. package/skills/global_config/{MCP_Manage → mcp-manage}/SKILL.md +3 -3
  174. package/skills/global_config/plan-canvas/SKILL.md +9 -2
  175. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +10 -2
  176. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +1 -1
  177. package/skills/global_config/read-the-damn-docs/SKILL.md +175 -0
  178. package/skills/global_config/requesting-code-review/SKILL.md +98 -0
  179. package/skills/global_config/requesting-code-review/code-reviewer.md +198 -0
  180. package/skills/global_config/using-git-worktrees/SKILL.md +170 -0
  181. package/skills/global_config/verification-before-completion/SKILL.md +123 -0
  182. package/skills/global_config/writing-plans/SKILL.md +126 -46
  183. package/skills/global_config/writing-plans-legacy/SKILL.md +152 -0
  184. package/.claude/CLAUDE.md +0 -12
  185. package/mcps/RhinoMCP/docs/content/docs/getting-started/gemini.md +0 -61
  186. /package/{GEMINI.md → RULES.md} +0 -0
@@ -0,0 +1,510 @@
1
+ # Language-Specific Dockerfile Guides
2
+
3
+ ## Overview
4
+
5
+ This guide provides best practices and optimized Dockerfile templates for popular programming languages and frameworks.
6
+
7
+ ## Node.js
8
+
9
+ ### Basic Node.js Application
10
+
11
+ ```dockerfile
12
+ # syntax=docker/dockerfile:1
13
+ FROM node:20-alpine AS base
14
+ WORKDIR /app
15
+
16
+ # Dependencies stage
17
+ FROM base AS deps
18
+ COPY package.json package-lock.json ./
19
+ RUN npm ci --only=production && npm cache clean --force
20
+
21
+ # Production stage
22
+ FROM base AS production
23
+ COPY --from=deps /app/node_modules ./node_modules
24
+ COPY . .
25
+ RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
26
+ USER nodejs
27
+ EXPOSE 3000
28
+ HEALTHCHECK CMD node -e "require('http').get('http://localhost:3000/health',(r)=>{process.exit(r.statusCode===200?0:1)})"
29
+ CMD ["node", "server.js"]
30
+ ```
31
+
32
+ ### Next.js Application
33
+
34
+ ```dockerfile
35
+ # syntax=docker/dockerfile:1
36
+ FROM node:20-alpine AS deps
37
+ WORKDIR /app
38
+ COPY package.json package-lock.json ./
39
+ RUN npm ci
40
+
41
+ FROM node:20-alpine AS builder
42
+ WORKDIR /app
43
+ COPY --from=deps /app/node_modules ./node_modules
44
+ COPY . .
45
+ ENV NEXT_TELEMETRY_DISABLED=1
46
+ RUN npm run build
47
+
48
+ FROM node:20-alpine AS runner
49
+ WORKDIR /app
50
+ ENV NODE_ENV=production
51
+ ENV NEXT_TELEMETRY_DISABLED=1
52
+ RUN addgroup --system --gid 1001 nodejs && \
53
+ adduser --system --uid 1001 nextjs
54
+ COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
55
+ COPY --from=builder --chown=nextjs:nodejs /app/public ./public
56
+ COPY --from=builder /app/node_modules ./node_modules
57
+ COPY --from=builder /app/package.json ./package.json
58
+ USER nextjs
59
+ EXPOSE 3000
60
+ CMD ["npm", "start"]
61
+ ```
62
+
63
+ ### Express.js API
64
+
65
+ ```dockerfile
66
+ # syntax=docker/dockerfile:1
67
+ FROM node:20-alpine
68
+ WORKDIR /app
69
+ COPY package*.json ./
70
+ RUN npm ci --only=production && npm cache clean --force
71
+ COPY . .
72
+ RUN addgroup -g 1001 -S appgroup && adduser -S app -u 1001 -G appgroup && \
73
+ chown -R app:appgroup /app
74
+ USER app
75
+ EXPOSE 3000
76
+ HEALTHCHECK --interval=30s --timeout=3s CMD node -e "require('http').get('http://localhost:3000/health',(r)=>{process.exit(r.statusCode===200?0:1)})"
77
+ CMD ["node", "server.js"]
78
+ ```
79
+
80
+ **Best Practices:**
81
+ - Use `npm ci` instead of `npm install` for deterministic builds
82
+ - Always use `package-lock.json` for version locking
83
+ - Run `npm cache clean --force` after install
84
+ - Use `--only=production` to exclude dev dependencies
85
+ - Set `NODE_ENV=production`
86
+
87
+ ## Python
88
+
89
+ ### Basic Python Application
90
+
91
+ ```dockerfile
92
+ # syntax=docker/dockerfile:1
93
+ FROM python:3.12-slim AS builder
94
+ WORKDIR /app
95
+ # hadolint ignore=DL3008
96
+ RUN apt-get update && apt-get install -y --no-install-recommends gcc && \
97
+ rm -rf /var/lib/apt/lists/*
98
+ COPY requirements.txt .
99
+ RUN pip install --no-cache-dir --user -r requirements.txt
100
+
101
+ FROM python:3.12-slim
102
+ WORKDIR /app
103
+ RUN useradd -m -u 1001 app
104
+ COPY --from=builder /root/.local /home/app/.local
105
+ COPY --chown=app:app . .
106
+ ENV PATH=/home/app/.local/bin:$PATH \
107
+ PYTHONUNBUFFERED=1 \
108
+ PYTHONDONTWRITEBYTECODE=1
109
+ USER app
110
+ EXPOSE 8000
111
+ CMD ["python", "app.py"]
112
+ ```
113
+
114
+ ### FastAPI Application
115
+
116
+ ```dockerfile
117
+ # syntax=docker/dockerfile:1
118
+ FROM python:3.12-slim AS builder
119
+ WORKDIR /app
120
+ # hadolint ignore=DL3008
121
+ RUN apt-get update && apt-get install -y --no-install-recommends gcc && \
122
+ rm -rf /var/lib/apt/lists/*
123
+ COPY requirements.txt .
124
+ RUN pip install --no-cache-dir --user -r requirements.txt
125
+
126
+ FROM python:3.12-slim
127
+ WORKDIR /app
128
+ RUN useradd -m -u 1001 app
129
+ COPY --from=builder /root/.local /home/app/.local
130
+ COPY --chown=app:app . .
131
+ ENV PATH=/home/app/.local/bin:$PATH \
132
+ PYTHONUNBUFFERED=1 \
133
+ PYTHONDONTWRITEBYTECODE=1
134
+ USER app
135
+ EXPOSE 8000
136
+ HEALTHCHECK CMD python -c "import urllib.request;urllib.request.urlopen('http://localhost:8000/health')" || exit 1
137
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
138
+ ```
139
+
140
+ ### Django Application
141
+
142
+ ```dockerfile
143
+ # syntax=docker/dockerfile:1
144
+ FROM python:3.12-slim AS builder
145
+ WORKDIR /app
146
+ # hadolint ignore=DL3008
147
+ RUN apt-get update && apt-get install -y --no-install-recommends \
148
+ gcc postgresql-client libpq-dev && \
149
+ rm -rf /var/lib/apt/lists/*
150
+ COPY requirements.txt .
151
+ RUN pip wheel --no-cache-dir --no-deps --wheel-dir /wheels -r requirements.txt
152
+
153
+ FROM python:3.12-slim
154
+ WORKDIR /app
155
+ # hadolint ignore=DL3008
156
+ RUN apt-get update && apt-get install -y --no-install-recommends \
157
+ postgresql-client libpq-dev && \
158
+ rm -rf /var/lib/apt/lists/*
159
+ COPY --from=builder /wheels /wheels
160
+ RUN pip install --no-cache /wheels/* && rm -rf /wheels
161
+ RUN useradd -m -u 1001 app
162
+ COPY --chown=app:app . .
163
+ RUN python manage.py collectstatic --noinput
164
+ ENV PYTHONUNBUFFERED=1 \
165
+ PYTHONDONTWRITEBYTECODE=1
166
+ USER app
167
+ EXPOSE 8000
168
+ CMD ["gunicorn", "--bind", "0.0.0.0:8000", "project.wsgi:application"]
169
+ ```
170
+
171
+ **Best Practices:**
172
+ - Use `pip install --no-cache-dir` to reduce image size
173
+ - Install build dependencies in builder stage only
174
+ - Use wheels for compiled dependencies
175
+ - Set `PYTHONUNBUFFERED=1` for real-time container logs (stdout/stderr flushed immediately)
176
+ - Set `PYTHONDONTWRITEBYTECODE=1` to skip `.pyc` files in the image
177
+ - Use `--user` flag for pip install (non-root)
178
+
179
+ ## Go
180
+
181
+ ### Basic Go Application
182
+
183
+ ```dockerfile
184
+ # syntax=docker/dockerfile:1
185
+ FROM golang:1.21-alpine AS builder
186
+ WORKDIR /app
187
+ COPY go.mod go.sum ./
188
+ RUN go mod download
189
+ COPY . .
190
+ RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" -o main .
191
+
192
+ FROM alpine:3.21
193
+ RUN apk --no-cache add ca-certificates
194
+ WORKDIR /app
195
+ RUN addgroup -g 1001 -S appgroup && adduser -S app -u 1001 -G appgroup
196
+ COPY --from=builder /app/main .
197
+ USER app
198
+ EXPOSE 8080
199
+ HEALTHCHECK CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
200
+ CMD ["./main"]
201
+ ```
202
+
203
+ ### Go with Distroless (Minimal)
204
+
205
+ ```dockerfile
206
+ # syntax=docker/dockerfile:1
207
+ FROM golang:1.21-alpine AS builder
208
+ WORKDIR /app
209
+ COPY go.mod go.sum ./
210
+ RUN go mod download
211
+ COPY . .
212
+ RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" -o /main .
213
+
214
+ # gcr.io/distroless/static-debian12 IS a specific tag; hadolint DL3006 is a
215
+ # false positive for non-Docker-Hub registries.
216
+ # hadolint ignore=DL3006
217
+ FROM gcr.io/distroless/static-debian12
218
+ COPY --from=builder /main /main
219
+ USER nonroot:nonroot
220
+ EXPOSE 8080
221
+ ENTRYPOINT ["/main"]
222
+ ```
223
+
224
+ ### Go with Scratch (Absolute Minimal)
225
+
226
+ ```dockerfile
227
+ # syntax=docker/dockerfile:1
228
+ FROM golang:1.21-alpine AS builder
229
+ WORKDIR /app
230
+ COPY go.mod go.sum ./
231
+ RUN go mod download
232
+ COPY . .
233
+ RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" -o /main .
234
+
235
+ FROM scratch
236
+ COPY --from=builder /main /main
237
+ COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
238
+ USER 1001:1001
239
+ ENTRYPOINT ["/main"]
240
+ ```
241
+
242
+ **Best Practices:**
243
+ - Use `CGO_ENABLED=0` for static binaries
244
+ - Use `-ldflags="-s -w"` to strip debug symbols
245
+ - Use scratch or distroless for minimal images
246
+ - Include ca-certificates if making HTTPS requests
247
+ - Use go modules (go.mod) for dependency management
248
+
249
+ ## Java
250
+
251
+ ### Spring Boot with Maven
252
+
253
+ ```dockerfile
254
+ # syntax=docker/dockerfile:1
255
+ FROM eclipse-temurin:21-jdk-jammy AS builder
256
+ WORKDIR /app
257
+ COPY mvnw pom.xml ./
258
+ COPY .mvn .mvn
259
+ RUN ./mvnw dependency:go-offline
260
+ COPY src ./src
261
+ RUN ./mvnw clean package -DskipTests && mv target/*.jar target/app.jar
262
+
263
+ FROM eclipse-temurin:21-jre-jammy
264
+ WORKDIR /app
265
+ RUN useradd -m -u 1001 app
266
+ COPY --from=builder --chown=app:app /app/target/app.jar ./app.jar
267
+ USER app
268
+ EXPOSE 8080
269
+ HEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1
270
+ ENTRYPOINT ["java", "-jar", "app.jar"]
271
+ ```
272
+
273
+ ### Spring Boot with Gradle
274
+
275
+ ```dockerfile
276
+ # syntax=docker/dockerfile:1
277
+ FROM eclipse-temurin:21-jdk-jammy AS builder
278
+ WORKDIR /app
279
+ COPY gradlew ./
280
+ COPY gradle gradle
281
+ COPY build.gradle settings.gradle ./
282
+ RUN ./gradlew dependencies --no-daemon
283
+ COPY src ./src
284
+ RUN ./gradlew build -x test --no-daemon && \
285
+ mv build/libs/*.jar build/libs/app.jar
286
+
287
+ FROM eclipse-temurin:21-jre-jammy
288
+ WORKDIR /app
289
+ RUN useradd -m -u 1001 app
290
+ COPY --from=builder --chown=app:app /app/build/libs/app.jar ./app.jar
291
+ USER app
292
+ EXPOSE 8080
293
+ HEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1
294
+ ENTRYPOINT ["java", "-jar", "app.jar"]
295
+ ```
296
+
297
+ ### Spring Boot Layered (Optimized)
298
+
299
+ ```dockerfile
300
+ # syntax=docker/dockerfile:1
301
+ FROM eclipse-temurin:21-jdk-jammy AS builder
302
+ WORKDIR /app
303
+ COPY mvnw pom.xml ./
304
+ COPY .mvn .mvn
305
+ RUN ./mvnw dependency:go-offline
306
+ COPY src ./src
307
+ RUN ./mvnw clean package -DskipTests
308
+ RUN java -Djarmode=layertools -jar target/*.jar extract --destination target/extracted
309
+
310
+ FROM eclipse-temurin:21-jre-jammy
311
+ WORKDIR /app
312
+ RUN useradd -m -u 1001 app
313
+ USER app
314
+ COPY --from=builder /app/target/extracted/dependencies/ ./
315
+ COPY --from=builder /app/target/extracted/spring-boot-loader/ ./
316
+ COPY --from=builder /app/target/extracted/snapshot-dependencies/ ./
317
+ COPY --from=builder /app/target/extracted/application/ ./
318
+ EXPOSE 8080
319
+ HEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1
320
+ ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]
321
+ ```
322
+
323
+ **Best Practices:**
324
+ - Use JRE instead of JDK for runtime (smaller)
325
+ - Use layered JARs for better caching
326
+ - Run `./mvnw dependency:go-offline` to cache dependencies
327
+ - Use `--no-daemon` with Gradle to avoid background processes
328
+ - Set appropriate Java heap size with `-Xmx` and `-Xms`
329
+
330
+ ## Rust
331
+
332
+ ### Rust Application
333
+
334
+ ```dockerfile
335
+ # syntax=docker/dockerfile:1
336
+ FROM rust:1.75-alpine AS builder
337
+ WORKDIR /app
338
+ RUN apk add --no-cache musl-dev
339
+ COPY Cargo.toml Cargo.lock ./
340
+ # Cache dependencies
341
+ RUN mkdir src && echo "fn main() {}" > src/main.rs && \
342
+ cargo build --release && \
343
+ rm -rf src
344
+ COPY src ./src
345
+ RUN touch src/main.rs && cargo build --release
346
+
347
+ FROM alpine:3.21
348
+ RUN apk --no-cache add ca-certificates
349
+ WORKDIR /app
350
+ RUN addgroup -g 1001 -S appgroup && adduser -S app -u 1001 -G appgroup
351
+ COPY --from=builder /app/target/release/app ./
352
+ USER app
353
+ EXPOSE 8080
354
+ CMD ["./app"]
355
+ ```
356
+
357
+ ## Ruby
358
+
359
+ ### Ruby on Rails
360
+
361
+ ```dockerfile
362
+ # syntax=docker/dockerfile:1
363
+ FROM ruby:3.3-alpine AS builder
364
+ WORKDIR /app
365
+ RUN apk add --no-cache build-base postgresql-dev nodejs yarn
366
+ COPY Gemfile Gemfile.lock ./
367
+ RUN bundle install --without development test
368
+ COPY package.json yarn.lock ./
369
+ RUN yarn install --production
370
+ COPY . .
371
+ RUN bundle exec rake assets:precompile
372
+
373
+ FROM ruby:3.3-alpine
374
+ WORKDIR /app
375
+ RUN apk add --no-cache postgresql-client nodejs
376
+ RUN addgroup -g 1001 -S appgroup && adduser -S app -u 1001 -G appgroup
377
+ COPY --from=builder /usr/local/bundle /usr/local/bundle
378
+ COPY --from=builder --chown=app:appgroup /app ./
379
+ USER app
380
+ EXPOSE 3000
381
+ CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
382
+ ```
383
+
384
+ ## PHP
385
+
386
+ ### PHP with Laravel
387
+
388
+ ```dockerfile
389
+ # syntax=docker/dockerfile:1
390
+ FROM composer:2 AS composer
391
+ WORKDIR /app
392
+ COPY composer.json composer.lock ./
393
+ RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
394
+
395
+ FROM php:8.3-fpm-alpine
396
+ WORKDIR /app
397
+ RUN apk add --no-cache postgresql-dev && \
398
+ docker-php-ext-install pdo pdo_pgsql
399
+ COPY --from=composer /app/vendor ./vendor
400
+ COPY . .
401
+ RUN composer dump-autoload --optimize --classmap-authoritative
402
+ RUN addgroup -g 1001 -S appgroup && adduser -S app -u 1001 -G appgroup && \
403
+ chown -R app:appgroup /app
404
+ USER app
405
+ EXPOSE 9000
406
+ CMD ["php-fpm"]
407
+ ```
408
+
409
+ ## .NET
410
+
411
+ ### ASP.NET Core
412
+
413
+ ```dockerfile
414
+ # syntax=docker/dockerfile:1
415
+ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS builder
416
+ WORKDIR /app
417
+ COPY *.csproj ./
418
+ RUN dotnet restore
419
+ COPY . .
420
+ RUN dotnet publish -c Release -o out
421
+
422
+ FROM mcr.microsoft.com/dotnet/aspnet:8.0
423
+ WORKDIR /app
424
+ RUN useradd -m -u 1001 app
425
+ COPY --from=builder --chown=app:app /app/out ./
426
+ USER app
427
+ EXPOSE 8080
428
+ HEALTHCHECK CMD curl -f http://localhost:8080/health || exit 1
429
+ ENTRYPOINT ["dotnet", "MyApp.dll"]
430
+ ```
431
+
432
+ ## Common Patterns Across Languages
433
+
434
+ ### Development vs Production
435
+
436
+ ```dockerfile
437
+ # syntax=docker/dockerfile:1
438
+ ARG NODE_ENV=production
439
+
440
+ FROM node:20-alpine AS development
441
+ ENV NODE_ENV=development
442
+ WORKDIR /app
443
+ COPY package*.json ./
444
+ RUN npm install
445
+ COPY . .
446
+ CMD ["npm", "run", "dev"]
447
+
448
+ FROM node:20-alpine AS production
449
+ ENV NODE_ENV=production
450
+ WORKDIR /app
451
+ COPY package*.json ./
452
+ RUN npm ci --only=production
453
+ COPY . .
454
+ RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
455
+ USER nodejs
456
+ CMD ["node", "server.js"]
457
+
458
+ FROM ${NODE_ENV} AS final
459
+ ```
460
+
461
+ ### With Database Migrations
462
+
463
+ ```dockerfile
464
+ # Add entrypoint script
465
+ COPY docker-entrypoint.sh /usr/local/bin/
466
+ RUN chmod +x /usr/local/bin/docker-entrypoint.sh
467
+ ENTRYPOINT ["docker-entrypoint.sh"]
468
+ CMD ["python", "app.py"]
469
+ ```
470
+
471
+ **docker-entrypoint.sh:**
472
+ ```bash
473
+ #!/bin/sh
474
+ set -e
475
+
476
+ # Run migrations
477
+ python manage.py migrate
478
+
479
+ # Start application
480
+ exec "$@"
481
+ ```
482
+
483
+ ## Framework-Specific Tips
484
+
485
+ ### Next.js
486
+ - Use standalone output mode for smaller images
487
+ - Set `NEXT_TELEMETRY_DISABLED=1`
488
+ - Copy only `.next/standalone` and `.next/static`
489
+
490
+ ### Django
491
+ - Run `collectstatic` during build
492
+ - Use gunicorn or uvicorn for production
493
+ - Include database client libraries
494
+
495
+ ### Spring Boot
496
+ - Use layered JARs for better caching
497
+ - Include actuator for health checks
498
+ - Set appropriate JVM memory limits
499
+
500
+ ### FastAPI
501
+ - Use uvicorn with workers for production
502
+ - Include health check endpoint
503
+ - Use `--proxy-headers` if behind proxy
504
+
505
+ ## References
506
+
507
+ - [Official Docker Samples](https://github.com/docker/awesome-compose)
508
+ - [Node.js Docker Best Practices](https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md)
509
+ - [Python Docker Best Practices](https://docs.python-guide.org/shipping/docker/)
510
+ - [Go Docker Best Practices](https://docs.docker.com/language/golang/build-images/)