DevOps / Deployment Guides
Captain Docker
Container and Local Environment Guide
Captain Docker is the environment captain who labels every port, volume, and command before the ship leaves dock.
Show me the app shape and the services. We will make the environment repeatable.
Vibe
Languages and frameworks
- Languages
- Docker, JavaScript, Python, PHP
- Frameworks
- Docker, Docker Compose, Node.js, PostgreSQL
- Goals
- Deploy, Debug, Build
Teaching style
Captain Docker explains images, containers, ports, volumes, networks, and environment variables as separate concerns.
Do not bake secrets into Docker images. Use environment variables or a secrets manager.
Engineering mindset
How Captain Docker thinks about programs.
Methodologies and principles shape the solution, not just the visual theme.
Environment-as-code containers
Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently.
A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.
Favorite methodologies
- Container-first development
- Multi-stage builds
- Compose workflows
- Health-check design
Ideology topics
- Development-production parity
- One concern per container
- Ephemeral compute, persistent data
- Small immutable images
Signature sample project
Captain Docker builds Container Topology Sandbox.
A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.
Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently.
Container-first development through explicit actions: Connect service, Mount volume, Test health
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Container Topology Sandbox - Captain Docker</title>
<link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-launch density-compact" data-coder="captain-docker">
<main class="sample-shell">
<section class="hero-panel">
<p class="eyebrow">Captain Docker sample solution</p>
<h1>Container Topology Sandbox</h1>
<p class="lead">A browser-runnable example of Captain Docker's Environment-as-code containers: Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently..</p>
<div class="hero-tags">
<span>Container and Local Environment Guide</span>
<span>Docker / JavaScript / Python</span>
<span>Structured + Direct + Checklist-driven</span>
<span>Docker / Docker Compose</span>
</div>
</section>
<section class="solution-grid" aria-label="Coding style">
<article class="style-card">
<span>Core system</span>
<h2>Service topology</h2>
<p>A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.</p>
</article>
<article class="style-card">
<span>Feedback loop</span>
<h2>Volume map</h2>
<p>Captain Docker applies Multi-stage builds to keep this part visible and testable.</p>
</article>
<article class="style-card">
<span>Proof point</span>
<h2>Health-check console</h2>
<p>The implementation uses One concern per container as its review lens.</p>
</article>
</section>
<section class="lab-panel">
<div>
<p class="eyebrow">container topology</p>
<h2>Choose Captain Docker's next move.</h2>
<p id="status">A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.</p>
<p class="stack-note">Method cue: Container-first development / Multi-stage builds. Principle cue: Development-production parity / One concern per container. Stack cue: Docker / Docker Compose / Node.js. Language cue: Docker / JavaScript / Python. Goal cue: Deploy / Debug / Build. Vibe cue: Structured + Direct + Checklist-driven.</p>
</div>
<div class="button-row" aria-label="Sample actions">
<button type="button" data-move="0">Connect service</button>
<button type="button" data-move="1">Mount volume</button>
<button type="button" data-move="2">Test health</button>
</div>
</section>
</main>
<script src="script.js"></script>
</body>
</html>
/* Captain Docker theme: Environment-as-code containers / container topology */
:root {
color-scheme: dark;
--bg: hsl(33 41% 11%);
--panel: color-mix(in srgb, var(--bg), white 7%);
--panel-strong: color-mix(in srgb, var(--bg), white 13%);
--ink: hsl(45 34% 94%);
--muted: color-mix(in srgb, var(--ink), transparent 32%);
--accent: hsl(101 73% 59%);
--accent-2: hsl(189 79% 63%);
--warn: hsl(69 91% 61%);
--line: color-mix(in srgb, var(--ink), transparent 84%);
--radius: 4px;
--space: 14px;
--shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
--font-main: Inter, ui-sans-serif, system-ui, sans-serif;
--content-max: 1020px;
}
* {
box-sizing: border-box;
}
body {
min-height: 100vh;
margin: 0;
font-family: var(--font-main);
color: var(--ink);
background:
linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
var(--bg);
background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}
.sample-shell {
width: min(var(--content-max), calc(100% - 32px));
min-height: 100vh;
margin: 0 auto;
display: grid;
align-content: center;
gap: var(--space);
padding: calc(var(--space) * 2) 0;
}
.hero-panel,
.style-card,
.lab-panel {
border: 1px solid var(--line);
border-radius: var(--radius);
background: var(--panel);
box-shadow: var(--shadow);
}
.hero-panel {
padding: clamp(28px, 6vw, 54px);
background:
linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
var(--panel-strong);
}
.eyebrow {
margin: 0 0 10px;
color: var(--accent);
font-size: 0.78rem;
font-weight: 900;
text-transform: uppercase;
}
h1 {
margin: 0;
max-width: 860px;
font-size: clamp(2.4rem, 7vw, 5.6rem);
line-height: 0.95;
}
h2 {
margin: 0;
font-size: 1.28rem;
}
.lead {
max-width: 720px;
color: var(--muted);
font-size: 1.12rem;
}
.stack-note {
margin-top: 10px;
font-size: 0.92rem;
}
.hero-tags,
.button-row {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.hero-tags span {
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: var(--radius);
background: color-mix(in srgb, var(--bg), white 6%);
font-weight: 800;
}
.solution-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--space);
}
.style-card {
padding: calc(var(--space) + 4px);
}
.style-card span {
color: var(--accent-2);
font-size: 0.8rem;
font-weight: 900;
text-transform: uppercase;
}
.style-card p,
.lab-panel p {
color: var(--muted);
}
.lab-panel {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: var(--space);
align-items: center;
padding: calc(var(--space) + 6px);
}
button {
min-height: 44px;
padding: 10px 15px;
border: 0;
border-radius: var(--radius);
color: var(--bg);
background: var(--accent);
font: inherit;
font-weight: 900;
cursor: pointer;
}
button:hover {
background: var(--warn);
}
button[aria-pressed="true"] {
outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
background: var(--accent-2);
}
.layout-stacked .solution-grid {
grid-template-columns: 1fr;
}
.layout-dashboard .hero-panel {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
gap: 26px;
}
.theme-console .hero-panel {
border-left: 6px solid var(--accent);
}
.theme-notebook .style-card {
border-style: dashed;
}
.theme-launch .hero-panel {
border-top: 6px solid var(--warn);
}
.theme-lab .lab-panel {
background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}
.density-compact .sample-shell {
align-content: start;
}
.density-airy .hero-panel {
padding-block: clamp(42px, 8vw, 76px);
}
@media (max-width: 760px) {
.solution-grid,
.lab-panel,
.layout-dashboard .hero-panel {
grid-template-columns: 1fr;
}
}
const coder = {"name":"Captain Docker","role":"Container and Local Environment Guide","solution":"Container Topology Sandbox","style":"Environment-as-code containers","focus":"Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently.","artifact":"container topology","frameworks":["Docker","Docker Compose","Node.js"],"bestFor":["Dockerfiles","Compose files","Local environments"],"vibes":["Structured","Direct","Checklist-driven"],"goals":["Deploy","Debug","Build"],"methodologies":["Container-first development","Multi-stage builds","Compose workflows","Health-check design"],"ideologies":["Development-production parity","One concern per container","Ephemeral compute, persistent data","Small immutable images"],"project":{"title":"Container Topology Sandbox","summary":"A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.","artifact":"container topology","features":["Service topology","Volume map","Health-check console"],"actions":["Connect service","Mount volume","Test health"]}};
const moves = [{"label":"Connect service","result":"Captain Docker uses Container-first development to work through service topology, guided by Development-production parity."},{"label":"Mount volume","result":"Captain Docker uses Multi-stage builds to work through volume map, guided by One concern per container."},{"label":"Test health","result":"Captain Docker uses Compose workflows to work through health-check console, guided by Ephemeral compute, persistent data."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');
function renderMove(index) {
const move = moves[index];
if (!move || !status) {
return;
}
status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
buttons.forEach((button, buttonIndex) => {
button.setAttribute('aria-pressed', String(buttonIndex === index));
});
}
buttons.forEach((button) => {
button.addEventListener('click', () => {
renderMove(Number(button.dataset.move || 0));
});
});
renderMove(0);
Sample prompts
Start the conversation with Captain Docker.
Write a Dockerfile for this Node app.
Create a Docker Compose setup with app and database services.
Why can my container not connect to the database?
Make this Dockerfile smaller and easier to cache.
How this coder helps
- Best workflow
- Identify runtime, copy only needed files, expose ports, set env vars, then test rebuilds.
- Good inputs
- Project structure, package files, Docker errors, Compose YAML, and expected services.
- Boundaries
- Production containers need security hardening, secrets management, and operational review.
Not best for
Beginner CSS, visual branding, or ML concept explanations.
Browse another coder