Cloud Native 7 min read

Stop Manually Writing Dockerfiles: How Docker init Automates Container Setup

This article explains how Docker's new CLI tool docker init can automatically generate Dockerfiles, docker‑compose files, and .dockerignore for various languages, saving time, reducing errors, and enforcing security and performance best practices for containerizing applications.

Efficient Ops
Efficient Ops
Efficient Ops
Stop Manually Writing Dockerfiles: How Docker init Automates Container Setup

Introduction

Many developers find writing Dockerfiles and docker‑compose.yml files painful and worry about unintentionally introducing security vulnerabilities.

Docker has released a generative‑AI‑powered CLI utility called docker init that helps automate this process.

What is docker init?

docker init is a command‑line tool that creates Docker resources such as

Dockerfile

,

docker‑compose.yml

, and

.dockerignore

based on the requirements of your project. It supports Go, Python, Node.js, Rust, ASP.NET, PHP, and Java, and works with Docker Desktop.

How to use docker init

1. Navigate to the project directory you want to containerize.

2. Run

docker init

and follow the prompts to select the appropriate template for your application.

Example: creating a simple Flask app.

<code>touch app.py requirements.txt</code>

Populate

app.py

with the following code:

<code># app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_docker():
    return '<h1> hello world </h1>'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

# requirements.txt
Flask</code>

docker init in action

docker init scans the project, asks you to confirm or customize values (e.g., Python version, port, entrypoint), and then generates the necessary Docker configuration files.

Generated

Dockerfile

example:

<code># syntax=docker/dockerfile:1

ARG PYTHON_VERSION=3.11.7
FROM python:${PYTHON_VERSION}-slim as base

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

ARG UID=10001
RUN adduser \
    --disabled-password \
    --gecos '' \
    --home '/nonexistent' \
    --shell '/sbin/nologin' \
    --no-create-home \
    --uid '${UID}' \
    appuser

RUN --mount=type=cache,target=/root/.cache/pip \
    --mount=type=bind,source=requirements.txt,target=requirements.txt \
    python -m pip install -r requirements.txt

USER appuser
COPY . .
EXPOSE 5000
CMD gunicorn 'app:app' --bind=0.0.0.0:5000</code>

The tool also generates a

docker‑compose.yml

(illustrated below) and a

.dockerignore

file. Since the example Flask app has no database, the database service section is commented out.

DockerDevOpsContainerizationBest PracticesFlaskdocker init
Efficient Ops
Written by

Efficient Ops

This public account is maintained by Xiaotianguo and friends, regularly publishing widely-read original technical articles. We focus on operations transformation and accompany you throughout your operations career, growing together happily.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.