# Dockerize And Deploy

> Dockerizes a repo — Dockerfile, docker-compose with volumes, and a preflight script. Use to containerize an app, add Docker support, write a deployment pipeline, set up docker-compose, configure volumes, or deploy to production with Docker.

- Skill: `rockclaver/dockerize-and-deploy` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add rockclaver/dockerize-and-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rockclaver/dockerize-and-deploy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: rockclaver (https://skillmd.com/u/rockclaver)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/rockclaver/dockerize-and-deploy

---


# Dockerize and Deploy

Containerize a repo and produce a deployment setup, one phase at a time.

## Workflow

### 1. Audit
Identify runtime, services, datastores, build step, existing Docker files, and env vars. Propose phases before writing.

### 2. Phases
1. **Dockerfile** — multi-stage: builder installs/compiles, runtime copies artifacts only, non-root user, pinned base image (e.g. `node:20.11-alpine`), `.dockerignore` excludes `node_modules`/`.env`/`.git`.
2. **docker-compose** — dev stack: source mounts for hot reload, debug ports, named volumes.
3. **Production compose** (`docker-compose.prod.yml`) — no source mounts, `restart: unless-stopped`, healthchecks, explicit volumes, `mem_limit`/`cpus` limits. See [REFERENCE.md](REFERENCE.md).
4. **Pre-flight** — copy `scripts/preflight.sh` into the project; validates env vars, Docker, port conflicts, DB reachability, dry-run build. Run: `bash scripts/preflight.sh`.
5. **Deploy** — `scripts/deploy.sh`: run `preflight.sh` (abort on fail) → pull/build image → run migrations → rolling restart → health-check → print status.

Merge or skip phases for simple repos.

### 3. Verify after each phase

```bash
docker build -t app:test .           # Dockerfile compiles
docker compose config                # compose files are valid YAML
docker compose up -d && docker compose ps  # services start healthy
bash scripts/preflight.sh            # pre-flight passes
```

## Guardrails

- Never embed secrets in Docker/compose files.
- Always run containers as a non-root user.
- No `latest` image tags in production — pin versions.
- DB volumes: named volumes only, never host bind mounts.
- No `.env.example`? Create one first.

## References

- [REFERENCE.md](REFERENCE.md) — volume/healthcheck patterns, resource limits, multi-stage examples by runtime, rolling deploy strategies.

