@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,348 @@
1
+ # Docker Best Practices Reference
2
+
3
+ This document summarizes official Docker best practices based on current recommendations from Docker documentation and industry standards.
4
+
5
+ ## General Principles
6
+
7
+ ### 1. Create Ephemeral Containers
8
+ - Containers should be as stateless and ephemeral as possible
9
+ - Should be able to stop, destroy, and recreate with minimal setup
10
+ - Align with Twelve-Factor App methodology
11
+
12
+ ### 2. Understand Build Context
13
+ - Use `.dockerignore` to exclude unnecessary files
14
+ - Keep context size minimal for faster builds
15
+ - Don't include secrets or sensitive data in context
16
+
17
+ ### 3. Use Multi-Stage Builds
18
+ - Separate build dependencies from runtime
19
+ - Dramatically reduce final image size
20
+ - Improve security by minimizing attack surface
21
+
22
+ ### 4. One Concern Per Container
23
+ - Each container should address a single concern
24
+ - Makes containers more reusable and easier to scale
25
+ - Simplifies debugging and updates
26
+
27
+ ## Dockerfile Instructions Best Practices
28
+
29
+ ### FROM
30
+
31
+ **Use specific tags, not :latest**
32
+ ```dockerfile
33
+ # Bad
34
+ FROM node:latest
35
+
36
+ # Good
37
+ FROM node:21-alpine
38
+
39
+ # Better
40
+ FROM node:21-alpine@sha256:abc123...
41
+ ```
42
+
43
+ **Choose minimal base images**
44
+ - Alpine Linux: ~5 MB base (vs ~80 MB for Ubuntu)
45
+ - Distroless: No shell, package manager (minimal attack surface)
46
+ - Scratch: Absolutely minimal (for static binaries)
47
+
48
+ **Prefer official images**
49
+ - Look for "Official Image" or "Verified Publisher" badges
50
+ - Official images are maintained and regularly updated
51
+
52
+ ### RUN
53
+
54
+ **Chain commands to reduce layers**
55
+ ```dockerfile
56
+ # Bad - creates 4 layers
57
+ RUN apt-get update
58
+ RUN apt-get install -y curl
59
+ RUN apt-get install -y vim
60
+ RUN curl -sL https://example.com/script.sh | bash
61
+
62
+ # Good - creates 1 layer
63
+ RUN apt-get update && apt-get install -y --no-install-recommends \
64
+ curl \
65
+ vim \
66
+ && rm -rf /var/lib/apt/lists/* \
67
+ && curl -sL https://example.com/script.sh | bash
68
+ ```
69
+
70
+ **Clean up in same layer**
71
+ ```dockerfile
72
+ # Package manager cache must be removed in same RUN
73
+ RUN apt-get update && apt-get install -y \
74
+ package1 \
75
+ package2 \
76
+ && rm -rf /var/lib/apt/lists/*
77
+
78
+ # For Alpine
79
+ RUN apk add --no-cache package1 package2
80
+ ```
81
+
82
+ **Use --no-install-recommends for apt**
83
+ ```dockerfile
84
+ RUN apt-get install -y --no-install-recommends package
85
+ ```
86
+
87
+ **Pin package versions**
88
+ ```dockerfile
89
+ # For apt
90
+ RUN apt-get install -y package=1.2.3-1
91
+
92
+ # For apk
93
+ RUN apk add package=1.2.3-r0
94
+
95
+ # For pip
96
+ RUN pip install package==1.2.3
97
+ ```
98
+
99
+ **Sort multi-line arguments**
100
+ ```dockerfile
101
+ RUN apt-get update && apt-get install -y \
102
+ curl \
103
+ git \
104
+ vim \
105
+ wget \
106
+ && rm -rf /var/lib/apt/lists/*
107
+ ```
108
+
109
+ **Use pipefail for pipes**
110
+ ```dockerfile
111
+ RUN set -o pipefail && wget -O - https://example.com | wc -l > /number
112
+ ```
113
+
114
+ ### COPY vs ADD
115
+
116
+ **Prefer COPY over ADD**
117
+ ```dockerfile
118
+ # Use COPY for files and directories
119
+ COPY app.py /app/
120
+
121
+ # Only use ADD for auto-extraction or remote URLs
122
+ ADD https://example.com/file.tar.gz /tmp/
123
+ ```
124
+
125
+ **Use COPY --chown to avoid extra layer**
126
+ ```dockerfile
127
+ # Bad - creates extra layer
128
+ COPY app.py /app/
129
+ RUN chown user:user /app/app.py
130
+
131
+ # Good - single layer
132
+ COPY --chown=user:user app.py /app/
133
+ ```
134
+
135
+ ### WORKDIR
136
+
137
+ **Use absolute paths**
138
+ ```dockerfile
139
+ # Bad
140
+ WORKDIR app
141
+
142
+ # Good
143
+ WORKDIR /app
144
+ ```
145
+
146
+ **Don't use RUN cd**
147
+ ```dockerfile
148
+ # Bad
149
+ RUN cd /app && npm install
150
+
151
+ # Good
152
+ WORKDIR /app
153
+ RUN npm install
154
+ ```
155
+
156
+ ### USER
157
+
158
+ **Don't run as root**
159
+ ```dockerfile
160
+ # Create user
161
+ RUN groupadd -r app && useradd -r -g app app
162
+
163
+ # Or for Alpine
164
+ RUN addgroup -g 1001 -S app && adduser -S app -u 1001
165
+
166
+ # Switch to user
167
+ USER app
168
+ ```
169
+
170
+ **Use high UID (>10000) for better security**
171
+ ```dockerfile
172
+ RUN useradd -u 10001 -m app
173
+ USER app
174
+ ```
175
+
176
+ ### CMD and ENTRYPOINT
177
+
178
+ **Use exec form for proper signal handling**
179
+ ```dockerfile
180
+ # Bad - shell form (doesn't handle signals)
181
+ CMD python app.py
182
+
183
+ # Good - exec form
184
+ CMD ["python", "app.py"]
185
+ ```
186
+
187
+ **Combine ENTRYPOINT and CMD**
188
+ ```dockerfile
189
+ # ENTRYPOINT defines the executable
190
+ ENTRYPOINT ["python"]
191
+
192
+ # CMD provides default arguments (can be overridden)
193
+ CMD ["app.py"]
194
+ ```
195
+
196
+ ### EXPOSE
197
+
198
+ **Document ports even though it doesn't publish**
199
+ ```dockerfile
200
+ EXPOSE 8080
201
+ EXPOSE 443
202
+ ```
203
+
204
+ ### HEALTHCHECK
205
+
206
+ **Add health checks for services**
207
+ ```dockerfile
208
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
209
+ CMD curl -f http://localhost:8080/health || exit 1
210
+ ```
211
+
212
+ ### LABEL
213
+
214
+ **Add metadata**
215
+ ```dockerfile
216
+ LABEL org.opencontainers.image.authors="team@example.com"
217
+ LABEL org.opencontainers.image.version="1.0.0"
218
+ LABEL org.opencontainers.image.description="Application description"
219
+ ```
220
+
221
+ ## Build Optimization
222
+
223
+ ### Layer Caching
224
+
225
+ **Order instructions from least to most frequently changing**
226
+ ```dockerfile
227
+ # 1. Base image (rarely changes)
228
+ FROM node:21-alpine
229
+
230
+ # 2. System packages (rarely change)
231
+ RUN apk add --no-cache curl
232
+
233
+ # 3. Dependencies (change occasionally)
234
+ COPY package*.json ./
235
+ RUN npm ci
236
+
237
+ # 4. Source code (changes frequently)
238
+ COPY . .
239
+ ```
240
+
241
+ ### Multi-Stage Builds
242
+
243
+ **Separate build and runtime**
244
+ ```dockerfile
245
+ # Build stage
246
+ FROM node:21 AS builder
247
+ WORKDIR /app
248
+ COPY package*.json ./
249
+ RUN npm install
250
+ COPY . .
251
+ RUN npm run build
252
+
253
+ # Runtime stage
254
+ FROM node:21-alpine
255
+ COPY --from=builder /app/dist /app
256
+ CMD ["node", "/app/index.js"]
257
+ ```
258
+
259
+ ### BuildKit Features
260
+
261
+ **Enable modern features**
262
+ ```dockerfile
263
+ # syntax=docker/dockerfile:1
264
+
265
+ # Use cache mounts
266
+ RUN --mount=type=cache,target=/root/.cache/pip \
267
+ pip install -r requirements.txt
268
+
269
+ # Use secret mounts (secrets not in final image)
270
+ RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
271
+ aws s3 cp s3://bucket/file .
272
+ ```
273
+
274
+ ## Security Best Practices
275
+
276
+ ### 1. Scan Images
277
+ ```bash
278
+ docker scan myimage:tag
279
+ # or
280
+ trivy image myimage:tag
281
+ ```
282
+
283
+ ### 2. Use Minimal Base Images
284
+ - Fewer packages = fewer vulnerabilities
285
+ - Alpine, distroless, or scratch
286
+
287
+ ### 3. Don't Store Secrets in Images
288
+ ```dockerfile
289
+ # Bad
290
+ ENV DATABASE_PASSWORD=secret123
291
+
292
+ # Good - use runtime config or secrets
293
+ # Pass at runtime: docker run -e DATABASE_PASSWORD=...
294
+ ```
295
+
296
+ ### 4. Run as Non-Root
297
+ ```dockerfile
298
+ USER app
299
+ ```
300
+
301
+ ### 5. Use Read-Only Filesystem
302
+ ```bash
303
+ docker run --read-only myimage
304
+ ```
305
+
306
+ ### 6. Limit Capabilities
307
+ ```bash
308
+ docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myimage
309
+ ```
310
+
311
+ ## Common Anti-Patterns
312
+
313
+ ### ❌ Using :latest tag
314
+ - Unpredictable
315
+ - Not reproducible
316
+ - Can break without warning
317
+
318
+ ### ❌ Not cleaning package cache
319
+ ```dockerfile
320
+ # Missing cleanup increases image by hundreds of MB
321
+ RUN apt-get update && apt-get install -y package
322
+ # Missing: && rm -rf /var/lib/apt/lists/*
323
+ ```
324
+
325
+ ### ❌ Running as root
326
+ - Security risk
327
+ - Violates principle of least privilege
328
+
329
+ ### ❌ Installing unnecessary packages
330
+ ```dockerfile
331
+ # Bloated image
332
+ RUN apt-get install -y vim nano emacs curl wget
333
+ ```
334
+
335
+ ### ❌ Using ADD instead of COPY
336
+ - ADD has implicit behavior
337
+ - Can extract archives unexpectedly
338
+
339
+ ### ❌ Multiple FROM in non-multi-stage context
340
+ - Creates confusion
341
+ - Use multi-stage builds properly
342
+
343
+ ## Resources
344
+
345
+ - [Official Docker Best Practices](https://docs.docker.com/build/building/best-practices/)
346
+ - [Dockerfile Reference](https://docs.docker.com/reference/dockerfile/)
347
+ - [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
348
+ - [Multi-Stage Builds](https://docs.docker.com/build/building/multi-stage/)