Docker Local Dev logo

Docker Local Dev

Community
thienanblog
docker-local-dev

Create or repair local Docker Compose services, Dockerfiles, mounts, networking, and readiness checks. Use when container configuration is the deliverable; ordinary container commands and production deployment are separate concerns.

Overview

Publisherthienanblog
Repositoryawesome-ai-agent-skills
Skill namedocker-local-dev
Stars
66
Forks
21
Bundled files
36
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 36 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by thienanblog on GitHub. Read the source before you install it.

Installation

Install the Docker Local Dev AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/thienanblog/awesome-ai-agent-skills.git /tmp/awesome-ai-agent-skills
mkdir -p .claude/skills
cp -r /tmp/awesome-ai-agent-skills/plugins/devops-skills/skills/docker-local-dev .claude/skills/docker-local-dev
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Docker Local Dev in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Docker Local Dev on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Docker Local Dev is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Docker Local Development

Working agreement

Follow the user's request and applicable repository instructions over these defaults. Use existing authorization; ask only about missing decisions that materially affect scope, cost, safety, or the result. Continue independent authorized work while awaiting an answer.

Run in the main conversation by default. Delegation can increase usage: obtain explicit approval for the proposed agent count and scope before using subagents. Reuse that approval within its bounds; ask again before expanding the approved count or scope.

Guardrails

  • Design for local development. Keep production images, secrets, deployment, certificates, and runtime topology separate.
  • Inspect before asking questions or proposing services. Treat detection as evidence, not authority.
  • Preserve existing Docker files and unrelated working-tree changes. Keep a semantic diff for material stack changes. Ordinary configuration edits are covered by a setup or repair request; volume deletion, destructive resets, and data migrations need authorization covering those effects.
  • Generate only services the project uses or the user explicitly requests. A database is not mandatory when the project uses SQLite, a host service, or an external database.
  • Prefer direct foreground commands and one concern per service. Add Supervisor or PM2 only when the project already requires it or production-parity testing justifies it.
  • Prefer a stable top-level Compose name: and role-based service names. Do not set container_name by default because it prevents service scaling and creates cross-project collisions.
  • Select images by project constraints, team or production compatibility, trusted publisher, supported version, and architecture. Treat an already-downloaded image only as a tie-breaker. Avoid floating latest tags in generated files.
  • Publish only ports needed by the host. Bind local-only ports to 127.0.0.1 by default; keep databases, caches, SMTP, PHP-FPM, and internal APIs unexposed when possible.
  • Keep secrets out of committed files, generated documentation, command output, and frontend or proxy containers. Generate an ignored local env file plus a safe example when configuration is needed.

Workflow

1. Inspect the project

Run project commands from the target project directory. Resolve bundled helpers through <skill-directory>/scripts/; their location is separate from the project working directory. Check Docker and Compose capabilities before selecting syntax:

bash
docker version
docker compose version

Inspect, when present:

  • compose.yaml, compose.yml, docker-compose*.yml, and override files
  • Dockerfile*, .dockerignore, .devcontainer/, Makefiles, and package scripts
  • application manifests, lockfiles, runtime-version files, env examples, and monorepo/workspace files
  • existing local proxy conventions, Compose project names, networks, volumes, and host port mappings
  • Git status and repository instructions before editing tracked files

Use stack detection when it adds useful evidence; direct inspection is enough for a known, narrow repair. Resolve the script from this skill directory:

bash
"<skill-directory>/scripts/detect-stack.sh" "<project-root>"

The script emits JSON on stdout and diagnostics on stderr. Confirm uncertain findings from source files without printing secret values.

When Docker is available, optionally inspect local images and networks:

bash
"<skill-directory>/scripts/detect-images.sh"
"<skill-directory>/scripts/detect-network.sh"

Do not let cached images or a detected network override project compatibility or isolation requirements.

2. Resolve the design

Infer and summarize:

  • apps in scope, dev commands, internal ports, shared packages, and live-reload needs
  • runtime and package-manager versions from constraints and lockfiles
  • database, cache, queue, scheduler, mail, and debugging services actually used
  • existing reverse proxy, explicit .localhost hostnames, same-origin /api routing, and required host exposure
  • bind mounts versus Compose Watch; use Watch only when supported by the installed Compose version
  • merge versus focused repair versus replacement of existing Docker files

Resolve ordinary setup choices from evidence. Ask only when missing information changes the apps in scope, data compatibility, network exposure, or a material replacement not already requested.

3. Load only relevant references

NeedRead
Detection rules and monorepo discoveryreferences/tech-stack-detection.md
Images, processes, dependencies, mounts, environment, Dockerfilesreferences/service-configuration-guide.md
WordPress, Drupal, or Joomlareferences/cms-configuration-guide.md
Ports, proxies, domains, networks, host accessreferences/networking-ports-guide.md
Existing Compose or Dockerfile changesreferences/merge-backup-strategy.md
Readiness checks and smoke testsreferences/health-check-patterns.md

Use assets as starting points, not immutable output. Remove unselected services and adapt placeholders, healthchecks, commands, paths, users, and versions to the detected project.

4. Preview and generate

For a material setup change, briefly summarize:

  • files to create or modify
  • inferred services and versions
  • host ports and domains
  • source/dependency mount strategy
  • important changes to an existing stack

Generate the smallest coherent setup within the existing authorization:

  1. local env example and ignored local env file when needed
  2. dev Dockerfile or dev build target
  3. .dockerignore
  4. compose.yaml without the obsolete top-level version
  5. selected proxy, process, and helper configuration
  6. concise usage notes only when useful or requested

Prefer:

  • bind-mounted source with named dependency volumes for straightforward active development
  • Compose Watch with sync, sync+restart, or rebuild rules for large trees, native dependencies, or projects that benefit from granular sync
  • one-shot dependency installers only when they solve a real bind-mount or monorepo problem; mark them as expected to exit successfully
  • separate worker and scheduler services using the same image as the app
  • Compose profiles for optional debugging and administration tools
  • health-gated dependencies only when the dependency defines a valid healthcheck

Run migrations, seeds, CMS installers, destructive cleanup, or database write tests only when authorization covers their data effects. A request to configure containers alone does not imply those actions.

5. Verify

Run static checks first:

bash
docker compose config --quiet
docker build --check .

Use docker build --check only when the installed Docker version supports it. Build and start when the request includes running or verifying the local setup. For file-generation-only requests, keep execution within that narrower scope:

bash
docker compose build
docker compose up -d --wait
docker compose ps -a

If --wait is unavailable, start detached and poll declared healthchecks with a bounded timeout. Inspect logs for failed or restarting services.

Run the bundled checks when applicable:

bash
"<skill-directory>/scripts/health-check.sh"
"<skill-directory>/scripts/db-test.sh"          # connection/read-only query
"<skill-directory>/scripts/db-test.sh" --crud   # explicit temporary-table CRUD check

Also run a stack-specific smoke check such as php artisan about, wp core version, drush status, python manage.py check, or the application's health endpoint. When runtime verification is in scope, verify hot reload with a harmless temporary edit and restore it afterward. Reuse passing checks unless relevant configuration or runtime conditions change.

6. Report

Report:

  • generated or modified files
  • selected services, versions, local URLs, and explicit host exposure
  • exact verification commands and results
  • expected stopped one-shot services
  • assumptions, skipped checks, and platform-specific limitations

Never include secret values in the report.

Host Port Registry

Persistent host-port tracking is optional. First check:

bash
PORT_REGISTRY_FILE="${DOCKER_LOCAL_DEV_PORT_REGISTRY:-${XDG_STATE_HOME:-$HOME/.local/state}/docker-local-dev/HOST_PORT_REGISTRY.md}"
test -f "$PORT_REGISTRY_FILE" && sed -n '1,220p' "$PORT_REGISTRY_FILE"

Creating or refreshing a registry scans beyond the current project and records local paths. Establish authorization for the scan root and output path; reuse it if already given. Then run:

bash
node "<skill-directory>/scripts/scan-host-ports.mjs" --root "<approved-root>" --out "$PORT_REGISTRY_FILE" --yes

Treat registered ports as reserved even when no process is currently listening. For a single project without a registry, a live port check is sufficient.

Acceptance Criteria

  • Generated Compose configuration parses without unresolved placeholders.
  • Selected images and commands match project constraints and contain no unreviewed floating tags.
  • App containers reach dependencies by Compose service name, not localhost.
  • Optional services are absent or profile-gated.
  • Host ports are minimal, conflict-free, and loopback-bound unless broader access was requested.
  • Healthchecks invoke commands available in their images and test readiness rather than process presence alone.
  • Source changes reload as intended; lockfile changes follow the documented install or rebuild path.
  • No secrets, production data, private domains, or unauthorized mutations appear in generated files or reports.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Docker Local Dev AI skill do?

Create or repair local Docker Compose services, Dockerfiles, mounts, networking, and readiness checks. Use when container configuration is the deliverable; ordinary container commands and production deployment are separate concerns.

Why use Docker Local Dev on TypingMind?

Because you install it once and use it with any model. Docker Local Dev is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Docker Local Dev in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/thienanblog/awesome-ai-agent-skills/tree/main/plugins/devops-skills/skills/docker-local-dev. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Docker Local Dev?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Docker Local Dev?

As many as you like. As long as a model supports skills, you can use Docker Local Dev with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Docker Local Dev AI skill free?

Yes. It is published on GitHub by thienanblog under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇