Skip to content

Optimize Recursive chown Execution Time on WORKDIR with Many Files #5118

@giant995

Description

@giant995

Description

The production Dockerfile uses a chown command to recursively change the owner of the WORKDIR directory:

When starting a new project, this command runs relatively fast. As the project grows, the quantity of files inevitably grows, increasing the execution time.

The recursive flag -R should be removed and the same result would be achieved:

RUN chown django:django ${APP_HOME}

Rationale

I currently maintain a mature project that was started with an earlier version of this cookiecutter. I often update the project with the patterns found in the upstream, to keep up with the current standards. Now, recursively changing the owner of the WORKDIR directory takes 2 minutes to complete.

On the preceding lines, both commands use the --chown=django:django argument to copy all files and directories with the django user as the owner:

{%- if cookiecutter.frontend_pipeline in ['Gulp', 'Webpack'] %}
COPY --from=client-builder --chown=django:django ${APP_HOME} ${APP_HOME}
{% else %}
COPY --chown=django:django . ${APP_HOME}
{%- endif %}

In both cases, the /app directory itself is owned by root while its subdirectories and subfiles are all owned by the django user. Removing the recursive flag -R to only change the owner of /app will drastically reduce the execution time and achieve the same result as before.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions