Docker 构建通过 chown 增加图像大小

问题描述 投票:0回答:1

我是多阶段构建和使用的新手

chown -R appuser:appuser /app

# Copy the virtual environment
COPY --from=builder --chown=appuser:appuser ${VIRTUAL_ENV} ${VIRTUAL_ENV}

# Copy application code
COPY --from=builder --chown=appuser:appuser /app /app

# Copy the virtual environment
COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}

# Copy application code
COPY --from=builder /app /app

RUN chown -R appuser:appuser /app

相差4GB。我在这里错过了什么吗?第一种方法使用接近 20GB,而第二种方法仅使用 16GB

docker docker-machine
1个回答
0
投票

您提到的两种方法之间的磁盘使用差异是由于 Docker 处理文件系统层和权限更改的方式造成的。在 Docker 中,每个

RUN
COPY
ADD
(等)命令都会创建一个新层。使用单独的
RUN chown
命令更改文件权限会产生一个附加层,该层本质上复制数据但具有不同的权限。这可能会使权限更改的文件和目录的大小影响加倍,这可能就是您在第一种方法中看到额外 4GB 的原因。

为了更好地分解它,让我们看看您使用的两种方法。

  1. 第一种方法(内联

    chown
    与复制)

    • 当您直接在
      --chown=appuser:appuser
      命令中使用
      COPY
      时,Docker 会在将文件复制到映像时应用所有权更改。这意味着文件将写入已设置最终所有权的图像,从而避免创建额外的层。
  2. 第二种方法(单独的

    chown
    命令)

    • 在此方法中,首先使用默认根所有权复制文件,然后使用
      RUN chown -R appuser:appuser /app
      命令在单独的步骤中更改所有权。这至少创建两层:一层用于复制的文件,另一层用于权限更改。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.