@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,492 @@
1
+ # Dockerfile Optimization Patterns
2
+
3
+ ## Overview
4
+
5
+ This guide provides comprehensive optimization techniques for reducing Docker image size, improving build times, and enhancing runtime performance.
6
+
7
+ ## Image Size Optimization
8
+
9
+ ### Use Multi-Stage Builds
10
+
11
+ **Impact:** 50-85% size reduction
12
+
13
+ ```dockerfile
14
+ # Before: Single stage (500MB)
15
+ FROM node:20
16
+ WORKDIR /app
17
+ COPY . .
18
+ RUN npm install
19
+ RUN npm run build
20
+ CMD ["node", "dist/server.js"]
21
+
22
+ # After: Multi-stage (150MB)
23
+ FROM node:20 AS builder
24
+ WORKDIR /app
25
+ COPY package*.json ./
26
+ RUN npm ci
27
+ COPY . .
28
+ RUN npm run build
29
+
30
+ FROM node:20-alpine
31
+ WORKDIR /app
32
+ COPY --from=builder /app/dist ./dist
33
+ COPY --from=builder /app/node_modules ./node_modules
34
+ CMD ["node", "dist/server.js"]
35
+ ```
36
+
37
+ ### Choose Minimal Base Images
38
+
39
+ **Size Comparison:**
40
+ ```
41
+ ubuntu:22.04 → 77MB
42
+ node:20 → 996MB
43
+ node:20-slim → 239MB
44
+ node:20-alpine → 132MB
45
+ alpine:3.21 → 7.8MB
46
+ distroless/static → 2MB
47
+ scratch → 0MB
48
+ ```
49
+
50
+ **Selection Guide:**
51
+ - **Full OS (ubuntu, debian):** When you need many system tools
52
+ - **Slim variants:** Good balance of size and compatibility
53
+ - **Alpine:** Minimal size, may have glibc compatibility issues
54
+ - **Distroless:** Highest security, minimal attack surface
55
+ - **Scratch:** For static binaries only (Go, Rust)
56
+
57
+ ### Remove Unnecessary Files
58
+
59
+ ```dockerfile
60
+ # Clean up in same RUN layer
61
+ RUN apt-get update && \
62
+ apt-get install -y --no-install-recommends curl && \
63
+ rm -rf /var/lib/apt/lists/*
64
+
65
+ # Remove build artifacts
66
+ RUN npm run build && \
67
+ rm -rf src/ tests/ docs/
68
+
69
+ # Use .dockerignore
70
+ # (prevents files from being sent to build context)
71
+ ```
72
+
73
+ ## Build Time Optimization
74
+
75
+ ### Layer Caching Strategy
76
+
77
+ **Order instructions from least to most frequently changing:**
78
+
79
+ ```dockerfile
80
+ # Bad - Invalidates cache on any code change
81
+ COPY . /app
82
+ RUN npm install
83
+
84
+ # Good - Cache dependencies separately
85
+ COPY package*.json /app/
86
+ RUN npm install
87
+ COPY . /app
88
+ ```
89
+
90
+ **Optimal Layer Order:**
91
+ 1. Base image (FROM)
92
+ 2. System packages (RUN apt-get)
93
+ 3. Application dependencies (package.json, requirements.txt)
94
+ 4. Application code (COPY . .)
95
+ 5. Build commands (RUN build)
96
+ 6. Runtime configuration (CMD, ENTRYPOINT)
97
+
98
+ ### BuildKit Cache Mounts
99
+
100
+ **Mount external caches to persist across builds:**
101
+
102
+ ```dockerfile
103
+ # syntax=docker/dockerfile:1
104
+
105
+ # NPM cache mount
106
+ FROM node:20-alpine
107
+ WORKDIR /app
108
+ COPY package*.json ./
109
+ RUN --mount=type=cache,target=/root/.npm \
110
+ npm ci
111
+
112
+ # Go module cache
113
+ FROM golang:1.21-alpine
114
+ WORKDIR /app
115
+ COPY go.mod go.sum ./
116
+ RUN --mount=type=cache,target=/go/pkg/mod \
117
+ go mod download
118
+
119
+ # Pip cache
120
+ FROM python:3.12-slim
121
+ WORKDIR /app
122
+ COPY requirements.txt .
123
+ RUN --mount=type=cache,target=/root/.cache/pip \
124
+ pip install -r requirements.txt
125
+ ```
126
+
127
+ **Enable BuildKit:**
128
+ ```bash
129
+ export DOCKER_BUILDKIT=1
130
+ docker build .
131
+ ```
132
+
133
+ ### Parallel Stage Execution
134
+
135
+ ```dockerfile
136
+ # syntax=docker/dockerfile:1
137
+
138
+ FROM alpine AS fetch-1
139
+ RUN wget https://example.com/file1
140
+
141
+ FROM alpine AS fetch-2
142
+ RUN wget https://example.com/file2
143
+
144
+ FROM alpine AS final
145
+ COPY --from=fetch-1 /file1 .
146
+ COPY --from=fetch-2 /file2 .
147
+ ```
148
+
149
+ BuildKit automatically parallelizes independent stages.
150
+
151
+ ## Layer Optimization
152
+
153
+ ### Combine RUN Commands
154
+
155
+ ```dockerfile
156
+ # Bad - Creates 5 layers
157
+ RUN apt-get update
158
+ RUN apt-get install -y curl
159
+ RUN apt-get install -y git
160
+ RUN apt-get install -y vim
161
+ RUN rm -rf /var/lib/apt/lists/*
162
+
163
+ # Good - Creates 1 layer
164
+ RUN apt-get update && \
165
+ apt-get install -y --no-install-recommends \
166
+ curl \
167
+ git \
168
+ vim && \
169
+ rm -rf /var/lib/apt/lists/*
170
+ ```
171
+
172
+ ### Minimize Layer Count
173
+
174
+ **Each instruction creates a layer:**
175
+ - FROM, RUN, COPY, ADD create layers
176
+ - ENV, WORKDIR, EXPOSE, USER do not create significant layers
177
+ - Combine related operations
178
+
179
+ ```dockerfile
180
+ # Bad - Many layers
181
+ COPY package.json .
182
+ COPY package-lock.json .
183
+ COPY tsconfig.json .
184
+ COPY src/ ./src/
185
+ COPY tests/ ./tests/
186
+
187
+ # Good - Fewer layers (use .dockerignore)
188
+ COPY . .
189
+ ```
190
+
191
+ ### Layer Size Analysis
192
+
193
+ ```bash
194
+ # Inspect layer sizes
195
+ docker history myimage:latest
196
+
197
+ # Find large layers
198
+ docker history --no-trunc --format "table {{.Size}}\t{{.CreatedBy}}" myimage:latest | sort -hr | head -10
199
+ ```
200
+
201
+ ## Dependency Optimization
202
+
203
+ ### Install Only Production Dependencies
204
+
205
+ **Node.js:**
206
+ ```dockerfile
207
+ # Development dependencies excluded
208
+ RUN npm ci --only=production
209
+
210
+ # Or use package.json scripts
211
+ RUN npm ci --omit=dev
212
+ ```
213
+
214
+ **Python:**
215
+ ```dockerfile
216
+ # Create separate requirements files
217
+ # requirements.txt (production)
218
+ # requirements-dev.txt (development)
219
+ RUN pip install --no-cache-dir -r requirements.txt
220
+ ```
221
+
222
+ **Java (Maven):**
223
+ ```dockerfile
224
+ # Skip tests during build
225
+ RUN ./mvnw clean package -DskipTests
226
+ ```
227
+
228
+ ### Remove Development Tools
229
+
230
+ ```dockerfile
231
+ # Multi-stage: Keep build tools in builder stage
232
+ FROM golang:1.21 AS builder
233
+ RUN apk add --no-cache git make
234
+ RUN make build
235
+
236
+ FROM alpine:3.21
237
+ # No build tools in final image
238
+ COPY --from=builder /app/binary /app/
239
+ ```
240
+
241
+ ## .dockerignore Optimization
242
+
243
+ **Reduces build context size and build time:**
244
+
245
+ ```dockerignore
246
+ # Version control
247
+ .git
248
+ .gitignore
249
+
250
+ # Dependencies (installed during build)
251
+ node_modules
252
+ vendor
253
+ __pycache__
254
+
255
+ # IDE files
256
+ .vscode
257
+ .idea
258
+ *.swp
259
+
260
+ # Build artifacts
261
+ dist
262
+ build
263
+ target
264
+
265
+ # Documentation
266
+ *.md
267
+ docs/
268
+
269
+ # CI/CD
270
+ .github
271
+ .gitlab-ci.yml
272
+
273
+ # Environment files
274
+ .env
275
+ .env.*
276
+
277
+ # Logs
278
+ *.log
279
+ logs/
280
+
281
+ # Tests
282
+ tests/
283
+ *.test
284
+ coverage/
285
+ ```
286
+
287
+ **Impact:**
288
+ - Smaller build context → Faster upload to Docker daemon
289
+ - Fewer files → Faster COPY operations
290
+ - No accidental secret leaks
291
+
292
+ ## Runtime Performance
293
+
294
+ ### Use Exec Form for CMD/ENTRYPOINT
295
+
296
+ ```dockerfile
297
+ # Bad - Shell form (spawns extra sh process)
298
+ CMD node server.js
299
+
300
+ # Good - Exec form (direct process execution)
301
+ CMD ["node", "server.js"]
302
+
303
+ # Benefits:
304
+ # - Proper signal handling (SIGTERM, SIGINT)
305
+ # - Faster startup
306
+ # - Lower memory usage
307
+ ```
308
+
309
+ ### Optimize Application
310
+
311
+ ```dockerfile
312
+ # Node.js: Use production mode
313
+ ENV NODE_ENV=production
314
+
315
+ # Python: Use optimized bytecode
316
+ ENV PYTHONOPTIMIZE=1
317
+
318
+ # Java: Set heap size
319
+ ENV JAVA_OPTS="-Xms512m -Xmx2048m"
320
+
321
+ # Go: Build with optimizations
322
+ RUN go build -ldflags="-s -w" -o app
323
+ ```
324
+
325
+ ### Health Checks
326
+
327
+ ```dockerfile
328
+ # Efficient health check
329
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
330
+ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
331
+
332
+ # Avoid heavy health checks
333
+ # Bad: HEALTHCHECK CMD curl http://localhost/full-db-check
334
+ ```
335
+
336
+ ## Build Optimization Checklist
337
+
338
+ - [ ] Use multi-stage builds
339
+ - [ ] Choose minimal base images (Alpine, distroless)
340
+ - [ ] Order layers from least to most frequently changing
341
+ - [ ] Combine RUN commands where logical
342
+ - [ ] Use BuildKit cache mounts
343
+ - [ ] Create comprehensive .dockerignore
344
+ - [ ] Install only production dependencies
345
+ - [ ] Clean package manager caches in same layer
346
+ - [ ] Remove development tools from final image
347
+ - [ ] Use exec form for CMD/ENTRYPOINT
348
+ - [ ] Optimize application for production
349
+ - [ ] Add efficient health checks
350
+
351
+ ## Advanced Techniques
352
+
353
+ ### Squash Layers (Use with Caution)
354
+
355
+ ```bash
356
+ # Squash all layers into one (loses layer caching)
357
+ docker build --squash -t myapp:latest .
358
+ ```
359
+
360
+ **Use Cases:**
361
+ - Final production images
362
+ - When layer caching isn't important
363
+ - To hide sensitive information in layers (better: use multi-stage)
364
+
365
+ **Drawbacks:**
366
+ - Loses layer caching benefits
367
+ - Larger initial download
368
+ - Less transparent image history
369
+
370
+ ### BuildKit Secrets (Zero-Copy Secrets)
371
+
372
+ ```dockerfile
373
+ # syntax=docker/dockerfile:1
374
+ FROM alpine
375
+ RUN --mount=type=secret,id=aws_credentials \
376
+ aws configure set credentials $(cat /run/secrets/aws_credentials)
377
+ ```
378
+
379
+ ```bash
380
+ docker build --secret id=aws_credentials,src=$HOME/.aws/credentials .
381
+ ```
382
+
383
+ ### Cross-Platform Builds
384
+
385
+ ```dockerfile
386
+ # Build for multiple platforms
387
+ docker buildx build \
388
+ --platform linux/amd64,linux/arm64 \
389
+ -t myapp:latest \
390
+ .
391
+ ```
392
+
393
+ ## Measuring Optimization Impact
394
+
395
+ ### Before and After Comparison
396
+
397
+ ```bash
398
+ # Build original
399
+ docker build -t myapp:before .
400
+ docker images myapp:before
401
+
402
+ # Build optimized
403
+ docker build -t myapp:after .
404
+ docker images myapp:after
405
+
406
+ # Compare sizes
407
+ docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep myapp
408
+ ```
409
+
410
+ ### Build Time Measurement
411
+
412
+ ```bash
413
+ # Measure build time
414
+ time docker build -t myapp:latest .
415
+
416
+ # Measure with cache
417
+ docker build -t myapp:cached .
418
+
419
+ # Measure without cache
420
+ docker build --no-cache -t myapp:no-cache .
421
+ ```
422
+
423
+ ### Dive Tool (Layer Analysis)
424
+
425
+ ```bash
426
+ # Install dive
427
+ brew install dive # macOS
428
+ # or download from https://github.com/wagoodman/dive
429
+
430
+ # Analyze image
431
+ dive myapp:latest
432
+ ```
433
+
434
+ ## Real-World Examples
435
+
436
+ ### Node.js Optimization
437
+
438
+ **Before (996MB):**
439
+ ```dockerfile
440
+ FROM node:20
441
+ WORKDIR /app
442
+ COPY . .
443
+ RUN npm install
444
+ CMD ["node", "server.js"]
445
+ ```
446
+
447
+ **After (50MB, 95% reduction):**
448
+ ```dockerfile
449
+ FROM node:20-alpine AS builder
450
+ WORKDIR /app
451
+ COPY package*.json ./
452
+ RUN npm ci --only=production
453
+ COPY . .
454
+
455
+ FROM node:20-alpine
456
+ WORKDIR /app
457
+ COPY --from=builder /app/node_modules ./node_modules
458
+ COPY --from=builder /app/server.js ./
459
+ CMD ["node", "server.js"]
460
+ ```
461
+
462
+ ### Go Optimization
463
+
464
+ **Before (800MB):**
465
+ ```dockerfile
466
+ FROM golang:1.21
467
+ WORKDIR /app
468
+ COPY . .
469
+ RUN go build -o app
470
+ CMD ["./app"]
471
+ ```
472
+
473
+ **After (8MB, 99% reduction):**
474
+ ```dockerfile
475
+ FROM golang:1.21-alpine AS builder
476
+ WORKDIR /app
477
+ COPY go.* ./
478
+ RUN go mod download
479
+ COPY . .
480
+ RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o app
481
+
482
+ FROM scratch
483
+ COPY --from=builder /app/app /app
484
+ ENTRYPOINT ["/app"]
485
+ ```
486
+
487
+ ## References
488
+
489
+ - [Docker Build Best Practices](https://docs.docker.com/build/building/best-practices/)
490
+ - [BuildKit Documentation](https://docs.docker.com/build/buildkit/)
491
+ - [Multi-stage Builds](https://docs.docker.com/build/building/multi-stage/)
492
+ - [Docker Image Size Optimization](https://betterstack.com/community/guides/scaling-docker/docker-build-best-practices/)