DockerfileStudio Source on GitHub

UBUNTU, YOUR WAY

A better starting point
for your next container.

Pick your packages. Make yourself at home.
Turn a few thoughtful choices into a Dockerfile you understand.

Non-root by defaultNo account needed100% in your browser

01 / CONFIGURE

Make it yours

Changing a recipe replaces your configuration. Make/CMake need your source files; adjust the executable name.

1 Choose your foundation

Pin a base-image digest (optional)

Release tags are explicit, but mutable. A digest pins image content, not apt package versions. Get a real digest using docker buildx imagetools inspect ubuntu:24.04. Match it to the selected release and architecture; cross-architecture execution may need emulation.

2 Pack the essentials

A curated catalog, not every Ubuntu package. Versions come from Ubuntu's archive and vary by release/architecture. Unavailable catalog entries are disabled; remove old selections after switching release.

Separate with spaces or commas. Plain names only. Availability is not checked online; review Ubuntu Packages. Some tools live in Universe and have different support coverage.

Update and install always share one RUN. Non-root configuration automatically includes passwd for account creation. No upgrades or third-party repositories are added.

3 Give your container an identity

Names and IDs must be new in the base image. We fail explicitly on collisions, never remove or renumber existing users. Ubuntu may already use ID 1000; 10001 is a safer default, not a guarantee. No password, sudo grants or extra groups are created.

What about host file ownership?

Linux permissions use numeric IDs, not matching names. Bind mounts retain host ownership and override image contents; COPY --chown cannot fix a mounted directory. Use IDs that match your intended host setup and are unused in the base. Rootless Docker and Docker Desktop can map identities differently.

4 Bring your application

A dedicated absolute app directory. The app user owns it; copied files get the same UID/GID. System directories are intentionally disallowed.

Review the generated .dockerignore before building. Never include secrets. Source programs and build scripts are code: build only trusted projects.

Fixed recipes only, no arbitrary shell field. Build tools stay in this single-stage image. Builds run as your configured user and need a Makefile or CMakeLists.txt.

One KEY=value per line. These are visible in the image: never enter passwords, tokens or secrets. HOME is managed by your user settings.

EXPOSE is documentation, not port publishing. Your app must listen on 0.0.0.0 inside the container.

One executable followed by separate arguments: ["python3","app.py"]. Exec form does not expand $VARIABLES, pipes or redirects. An explicit ["sh","-c","…"] deliberately invokes a shell; only use trusted code.

When set, startup command items become arguments to the entrypoint. Scripts need executable permissions and a valid Linux shebang.

5 Name it & run it

Commands target a local Docker installation. This site generates files only: it cannot build, execute, upload or publish an image.