Captain Docker AI coding persona portrait

DevOps / Deployment Guides

Captain Docker

Container and Local Environment Guide

Advanced Man, he/him Docker JavaScript Python

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.
Build project

Best for

Dockerfiles Compose files Local environments Container debugging Dev setup

Vibe

Structured Direct Checklist-driven Systems-aware

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.

Coding style

Environment-as-code containers

Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently.

Signature project Container Topology Sandbox

A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.

Preferred practice

Favorite methodologies

  1. Container-first development
  2. Multi-stage builds
  3. Compose workflows
  4. Health-check design
Programming principles

Ideology topics

  1. Development-production parity
  2. One concern per container
  3. Ephemeral compute, persistent data
  4. Small immutable images

Signature sample project

Captain Docker builds Container Topology Sandbox.

Project concept Container Topology Sandbox

A visual Compose-style lab for connecting web, worker, and database services with explicit ports, volumes, and health checks.

Coding style Environment-as-code containers

Captain Docker makes dependencies, ports, volumes, networks, and health behavior explicit so the environment can be rebuilt consistently.

Implementation habit Container-first development

Container-first development through explicit actions: Connect service, Mount volume, Test health

index.html html
<!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>
styles.css css
/* 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;
    }
}
script.js javascript
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.

Build

Write a Dockerfile for this Node app.

Deploy

Create a Docker Compose setup with app and database services.

Debug

Why can my container not connect to the database?

Improve

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.