agentleFS
vekzz-devvekzz-dev/opencode-skills/skills/docker/SKILL.md

docker

Skill4 starsChanged 40 days agoMITView on GitHub

Containerization best practices, engine-agnostic: multi-stage builds, compose, networking, volumes, security, and image optimization for Docker or Podman. Trigger: Docker, Dockerfile, docker-compose, Podman, container, image build, or containerization.

  • Reads credentials
  • Deletes or force-pushes

55 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use ml-training-recipe, replication and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • getcompanion-aiSkill

    ml-training-recipe

    Find implementable ML training recipes from papers, datasets, docs, and code. Use when the user wants to fine-tune, train, reproduce, or choose a practical ML method, dataset, hyperparameter setup, or benchmark recipe.

    Also in 3 projects that use this

  • getcompanion-aiSkill

    replication

    Plan a replication of a paper, claim, or benchmark, and execute only after an explicit environment choice. Use when the user asks to replicate results, reproduce an experiment, verify a claim empirically, or build a replication package.

    Also in 3 projects that use this

  • Sorcha-PlatformSkill

    scalar

    Generates and configures Scalar OpenAPI UI for API documentation. Use when: Adding API documentation to services, configuring OpenAPI endpoints, customizing documentation themes

    Also in 3 projects that use this

  • brainbytes-devSkill

    alpha-research

    Also in 3 projects that use this

  • JaimeParkerSkill

    paper-code-audit

    Perform three-way cross-validation of a research paper by comparing the original paper text (via Zotero), official code implementation (via Git), and personal Obsidian notes. Use this skill whenever the user wants to "audit a paper", "verify paper claims against code", "cross-check notes with implementation", "triangulate paper + code + notes", "find discrepancies between paper and code", or mentions wanting a deep, structured comparison of a paper's claims against its implementation and their own notes. Also trigger when the user asks to "analyze this paper thoroughly" with code available, or when they want to systematically reconcile what the paper says, what the code does, and what their notes claim.

    Also in 3 projects that use this

  • Sorcha-PlatformSkill

    redis

    Implements Redis caching, session management, and distributed coordination for the Sorcha platform. Use when: Adding caching layers, token revocation, rate limiting, SignalR backplane, or distributed state.

    Also in 5 projects that use this

  • +1 more from getcompanion-ai

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 47 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use layered JARs so dependency layers cache independently from application code.

    line 58
  2. Very specific:

    Read-only root filesystem: --read-only --tmpfs /tmp

    line 145

“Common” is measured: kept by at least 6 in 10 of the 47 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

When to Use

  • Writing or reviewing a Dockerfile
  • Setting up compose for dev/test/prod
  • Optimizing image size or build time
  • Container security, networking, or volume management
  • Containerizing a Spring Boot application

Engine agnosticism

Everything in this skill is spec OCI: the Dockerfile, the multi-stage build, the Compose spec files, and the feature flags shown run unchanged on Docker or Podman. The examples use docker CLI; substitute podman or lean on the podman-docker shim where it exists.

  • Dockerfile semantics: Docker (BuildKit) ≈ Podman (Buildah). No docker-only Dockerfile instructions are used here.
  • Compose: prefer the Compose spec files (compose.yaml) and a Compose v2 client. docker compose (v2.22+) works against a Podman socket via DOCKER_HOST; podman-compose implements less of the spec (notably no watch).
  • Image scanning: trivy is the engine-neutral default (next section).
  • Image versions in the examples below are illustrative (e.g. postgres:16-alpine); the production version is a project decision recorded in the project docs, not a rule of this skill.

Instructions

1. Multi-stage Builds for Spring Boot

# Stage 1: Build with Maven
FROM eclipse-temurin:21-jdk-alpine AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src src
RUN mvn package -DskipTests -B

# Stage 2: Extract layered JAR for cache efficiency
RUN java -Djarmode=layertools -jar target/app.jar extract --destination extracted

# Stage 3: Runtime
FROM eclipse-temurin:21-jre-alpine
RUN addgroup -S app && adduser -S app -G app
USER app
WORKDIR /app
COPY --from=builder /app/extracted/dependencies/ ./
COPY --from=builder /app/extracted/spring-boot-loader/ ./
COPY --from=builder /app/extracted/snapshot-dependencies/ ./
COPY --from=builder /app/extracted/application/ ./
EXPOSE 8080
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]

Use layered JARs so dependency layers cache independently from application code.

2. Dockerfile Best Practices

PracticeWhy
Use specific tags (21-jre-alpine, not latest)Reproducible builds
Prefer eclipse-temurin over openjdkActively maintained, security patched
Run as non-root (USER app)Security — container breakout mitigation
Combine RUN commandsReduce layers; apk add --no-cache && rm -rf /var/cache/apk/*
Use COPY --chown=app:appAvoid permission issues at runtime
Set EXPOSE as documentationDoes not publish the port, just documents intent
Use HEALTHCHECKLet orchestrators know container state
Prefer exec form (["java", "-jar"])Handles signals correctly (SIGTERM → graceful shutdown)

3. docker-compose Patterns

Dev environment with services:

services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: dev
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb
      SPRING_DATASOURCE_USERNAME: app
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    volumes:
      - ./target:/app/target  # hot reload in dev

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d mydb"]
      interval: 5s
      timeout: 3s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  pgdata:
PatternUsage
depends_on + condition: service_healthyWait for DB to be ready before starting app
.env fileKeep secrets out of compose files
Named volumesPersist data across restarts (db, cache)
Multi-stage DockerfileDev builds fast, prod is slim
Profile-specific overridesdocker-compose -f compose.yml -f compose.dev.yml

4. Decision Table

NeedApproach
Local dev with hot reloaddocker compose watch (v2.22+, works against a Podman socket via DOCKER_HOST; absent in podman-compose) or spring-boot-devtools with volume mount
CI buildMulti-stage with --cache-from
Production deploySlim runtime image, non-root, read-only root fs
Database in testsTestcontainers (not compose in tests; see java-springboot-testing skill)
Multiple microservicesCompose with shared network
KubernetesUse the same OCI image, add liveness/readiness probes

5. Security

  • Never hardcode secrets in Dockerfile or compose — use secrets mounts or env files
  • USER nonroot — always
  • COPY --chown=nonroot:nonroot — match the runtime user
  • Read-only root filesystem: --read-only --tmpfs /tmp
  • Scan with trivy (engine-neutral), e.g. trivy image myapp:latest; docker scout is Docker-only
  • No curl/wget in runtime image — reduces attack surface

Commands

# Build (/docker | /podman — same OCI inputs through either engine)
docker build --cache-from myapp:latest -t myapp:latest .
podman build -t myapp:latest .

# Run with compose for dev (Compose spec client; engine-agnostic via socket)
docker compose up -d
DOCKER_HOST=unix:///run/user/1000/podman/podman.sock docker compose up -d

# Watch for hot reload (Compose v2.22+)
docker compose watch

# Scan image for vulnerabilities (engine-neutral)
trivy image myapp:latest
# Docker-only alternative: docker scout quick myapp:latest

# Run with read-only root fs (identical flag on docker and podman)
podman run --read-only --tmpfs /tmp myapp:latest

Resources

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.