docker-deployment — Claude Code skill: Docker for Node.js
A skill that walks a Node.js app through containerization: Dockerfile, multi-stage builds, Docker Compose and a production-ready image.
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a claude-codeWhat docker-deployment does
The skill covers the whole path from a first Dockerfile to a production build. It starts with node:18-alpine, installs dependencies via npm ci --only=production, then splits the build into stages so node_modules is copied from the builder. The final image runs as the non-root nodejs user and ships a HEALTHCHECK.
A ready docker-compose.yml wires the app to postgres:15-alpine, redis:7-alpine and nginx, with commands for docker-compose up -d, following logs, tearing down and scaling the app service. There are also sections on .dockerignore, environment variables through ENV, environment and env_file, volumes for logs and node_modules, pushing to Docker Hub, and a GitHub Actions workflow that builds and pushes the image.
Two failure modes get their own write-up: layer caching for node_modules and SIGTERM handling, because without the latter a container will not shut down cleanly. That is why the examples put node in CMD instead of npm start. You need Docker installed and a Node.js project with a package.json; the image tags and port 3000 in the examples are placeholders for your own setup.
What it helps with
- write a Dockerfile for a Node.js service from scratch
- shrink a production image with a multi-stage build
- run the app alongside Postgres, Redis and nginx from one
docker-compose.yml - add a healthcheck and stop running the container as root
- push an image to Docker Hub from a GitHub Actions workflow
Example prompts for the agent
- write a multi-stage Dockerfile for my Node.js app
- add app, db and redis services with volumes to docker-compose.yml
- why does my container ignore SIGTERM on shutdown?
How to install docker-deployment
1Skills CLI (Vercel)
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a claude-code2Manually: put the files in place
~/.claude/skills/docker-deployment/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/docker-deployment/
1Skills CLI (Vercel)
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a codex2Manually: put the files in place
.agents/skills/docker-deployment/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a cursor2Manually: put the files in place
.cursor/skills/docker-deployment/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install pluginagentmarketplace/custom-plugin-nodejs docker-deployment2Manually: put the files in place
.github/skills/docker-deployment/SKILL.md1Skills CLI (Vercel)
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a gemini-cli2Platform CLI
gemini skills install https://github.com/pluginagentmarketplace/custom-plugin-nodejs --path skills/docker-deploymentManually: put the files in place
.devin/skills/docker-deployment/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about docker-deployment
How do I install docker-deployment in Claude?
Run npx skills add pluginagentmarketplace/custom-plugin-nodejs --skill docker-deployment -a claude-code. The skill file then lands at ~/.claude/skills/docker-deployment/SKILL.md.
What does docker-deployment do?
It helps containerize a Node.js app: Dockerfile, a multi-stage image, a docker-compose.yml with a database and cache, plus the steps for a production build.
What do I need for the skill to work?
Docker installed and a Node.js project with a package.json. The examples use node:18-alpine, postgres:15-alpine and redis:7-alpine on port 3000, so swap those for your own setup.