{{ summaryTitle }}
{{ summaryValue }}

{{ summaryLine }}

Instructions{{ computation.ok ? values.instruction_count : '—' }} Healthcheck{{ computation.ok ? (values.healthcheck_included ? 'Included' : 'Omitted') : '—' }} Port{{ computation.ok && values.exposed_port ? values.exposed_port : 'None' }}

{{ summaryAnnouncement }}

Dockerfile drafting inputs
Name the service or image target, for example orders-api.
Choose Node.js, Python, Go, or Java Maven service conventions.
Examples: 22, 3.12, 1.24, or 21.
Use the compatibility profile that fits the application dependencies.
Use an absolute path inside the image.
Use the deterministic install command for the selected package manager.
Optional for Node.js and Python; the Go and Java profiles supply build defaults.
Enter the process the runtime image should start.
Use 0 to omit the exposed-port instruction.
tcp
Use a lightweight local path such as /health.
Comma or newline separated; blank is neutral.
One NAME=value or NAME per line; blank is neutral.
One KEY=value per line; blank is neutral.
Blank keeps only the generated OCI title label.
The neutral default is off.
{{ params.include_comments ? 'Included' : 'Omitted' }}
{{ textExportAnnouncement }}
{{ values.dockerfile_text }}
{{ textExportAnnouncement }}
{{ values.dockerignore_text }}
{{ chartExportAnnouncement }}
{{ tableExportAnnouncement }}
StageInstructionPurposeCopy
{{ row.stage }}{{ row.instruction }}{{ row.purpose }}
{{ tableExportAnnouncement }}
SignalStatusEvidenceNext actionCopy
{{ row.signal }}{{ row.status }}{{ row.evidence }}{{ row.next_action }}

A container image is assembled from ordered instructions, and those instructions decide much more than whether the application compiles. They define the base runtime, the files available during the build, which commands create filesystem layers, the account that runs the process, and the command launched when a container starts.

Build and runtime needs are often different. Compilers, package managers, source trees, and development dependencies may be necessary to produce an artifact but unnecessary in production. A multi-stage Dockerfile puts those tools in an earlier stage and copies only the required application material into the final stage. This can reduce the runtime image's size and attack surface, provided the copied artifact is complete.

Dockerfile decisions that affect build and runtime behavior
Decision What it controls Common mistake
Base image Runtime, operating-system libraries, and update lineage Choosing a tag that moves or lacks a required native library
Build context Local files the builder can read Sending secrets, caches, logs, or large generated directories
Instruction order Layer reuse and cache invalidation Copying all source before installing unchanged dependencies
Final stage Files, tools, metadata, and user present at runtime Shipping a compiler or running the service as root
Default command Process startup and signal handling Using a shell wrapper when a direct executable would work

Cache-friendly ordering normally copies dependency manifests before application source. Package installation can then be reused when only source code changes. BuildKit cache mounts preserve package-manager downloads between builds without making those cache directories part of the image layer, although a build must still succeed when the cache is empty.

The ignore file is part of the security boundary. Docker sends the build context before COPY runs, so excluding a file from later instructions is not enough if that file should never reach the builder. Environment files, private keys, cloud configuration, version-control data, local dependencies, and test output commonly need exclusion.

A valid Dockerfile remains only a build recipe. It cannot show that the selected image tag exists for the target platform, native dependencies are compatible, the application binds the expected interface, the health route is meaningful, or the process has the filesystem permissions it needs. Those facts emerge only from a real build, image inspection, and container smoke test.

Secrets need a separate path. Values supplied through ARG or ENV can appear in build metadata, image configuration, history, logs, or attestations. Build secrets and runtime secret injection are safer than embedding credentials in generated instructions.

How to Use This Tool:

Choose the stack that matches the repository, then replace its defaults with commands already proven in that project.

  1. Enter an Image label and select the Application stack. Changing stacks loads matching version, base-image flavor, work directory, commands, port, and health defaults.
  2. Confirm the Runtime version and Image flavor against supported upstream tags and the application's native-library needs. Use an absolute Work directory.
  3. Set the deterministic Install command, optional Build command, and real Start command. The install command is required except for Go, and every stack needs a start command.
  4. Set Application port from 0 through 65535; zero omits EXPOSE. A health path beginning with / can generate a probe for Node.js or Python when the port is positive.
  5. Review the Dockerfile, ignore rules, build plan, and hardening findings. Remove secret-like values, then run a real build and start the image before treating the draft as usable.

Interpreting Results:

The generated Dockerfile and .dockerignore are the primary artifacts. The instruction profile counts structural lines, while the build plan explains the intended stage and cache sequence. Neither is a parser result from Docker.

Review needed means at least one hardening heuristic found a concern, such as a latest-style base selection, missing cache mount, unrecognized non-root user, absent healthcheck, secret-like key, invalid advanced assignment, or shell-wrapped start command. A clear review means those specific checks passed; it is not a vulnerability scan or supply-chain attestation.

Verify the copied text with the actual repository. Build the image, run it with the intended runtime configuration, call a readiness endpoint when applicable, inspect the final user and files, and scan the resolved image digest before release.

Technical Details:

The generator applies a stack-specific transformation rather than translating arbitrary application source. Each profile chooses base-image shapes, dependency manifests, cache targets, stage boundaries, runtime ownership, and a default command pattern.

Transformation Core:

Stack-specific Dockerfile generation paths
Stack Build path Runtime path
Node.js Copies npm, pnpm, or Yarn manifests before source; installs in a dependency stage and runs the optional build in a second stage. Copies the built application into the same Node image family, sets production mode, and runs as node.
Python Creates /opt/venv, upgrades pip, installs declared dependencies, and optionally runs a build command. Copies the virtual environment and source into a fresh Python image, creates app, and runs without root privileges.
Go Uses a Go builder with module and compile caches, then expects the build command to create /out/app. Copies that binary into a distroless static Debian 12 image and runs as nonroot.
Java Maven Resolves pom.xml dependencies before copying src, then packages with Maven. Copies the resulting JAR into an Eclipse Temurin JRE image, creates app, and runs as that user.

Node.js package-manager detection follows the install and build command text. It selects npm unless either command names pnpm or Yarn. Cache mounts then target the detected manager; Python uses the pip cache, Go uses module and compiler caches, and Maven uses its local repository.

The start command becomes JSON exec form when it can be split into ordinary tokens. An already valid JSON string array is preserved. Pipes, redirects, command substitution, semicolons, and other shell operators cause the command to become ["sh", "-c", "..."] and trigger a review because signal handling and quoting differ from direct exec form.

Healthchecks are deliberately stack-specific. Node.js uses the runtime's fetch function and succeeds only for an HTTP success response. Python uses its standard URL client and accepts a response below 500. Go's distroless runtime and the Java profile do not receive a generated probe, even if a health path is entered.

Advanced assignments accept one key per line. Invalid key names are omitted and reported. Additional OS packages are installed only for Node.js, Python, and Java; the Go distroless profile does not emit them. The Go profile also does not emit additional environment assignments, so add runtime environment through deployment configuration or revise the draft explicitly.

Hardening Rule Core:

Meaning and limits of Dockerfile hardening checks
Check Modeled evidence Important limit
Base tag Version and flavor do not use a latest-style value. A named release line is not the same as digest pinning.
Stage separation More than one FROM instruction is present. Copied files still need inspection for unnecessary build material.
Non-root runtime A recognized USER node, USER app, or USER nonroot line is present. File ownership and runtime permissions are not executed or tested.
Secret-like values Build-argument and environment keys are scanned for names such as token, password, private, or credential. A naming heuristic can miss sensitive values or flag harmless names.
Build context Common VCS, environment, key, cache, log, and stack-output patterns are excluded. Repository-specific required files and additional sensitive paths need manual review.

Generated build arguments appear before the first FROM. Docker treats that as global scope for base-image expressions; redeclare an argument inside a stage before expecting later instructions to use it. Never use that adjustment to pass a secret.

Privacy and Safety Notes:

  • Draft generation uses the values in the browser and does not send the repository to a remote builder. The generated text is not proof of a successful or safe image build.
  • Do not place real credentials in Build arguments or Additional environment. Use BuildKit secret mounts or runtime secret injection.
  • Review .dockerignore against the repository before saving it. Broad exclusions can remove required generated assets or vendored files, while missing patterns can expose sensitive context.
  • Resolve image tags to approved digests, scan the built image, and confirm update policy outside this generator.

References: