【问题标题】:Why does docker image grow so fast after installing sudo?为什么安装 sudo 后 docker 镜像增长如此之快?
【发布时间】:2021-10-26 14:02:30
【问题描述】:

我有一个基于 oracle linux 的本地 docker 映像,用于安装 oracle 数据库。这更像是一个 docker 问题而不是一个 DB 问题。

有一些相当大的数据文件(~12GB)。

通常,当我执行 docker commit 时,它会稍微增加图像的大小,并添加任何新内容。

我在机器上安装了 sudo,突然每次我提交映像时,它都会使映像的大小增加一倍 (12GB->24GB->50GB)。

我想我可以找到不使用 sudo 的方法,但有人猜到为什么仅仅以 root 身份运行“yum install sudo”会导致如此巨大的图像大小?我不知道要提供什么其他细节。

docker 提交没什么特别的:

docker commit my-container the-image:v1

我用 du -sh 浏览了整个图像,没有其他数据文件可以解释大小。

我确实有一些挂载点和卷,但据我所知,这些不应包含在映像中,即使它们是映像大小最终也会大于卷的总和。

有没有机会将交换空间写入图像?我关闭了数据库,不知道这与安装或不安装 sudo 命令有什么关系。

【问题讨论】:

  • 复制您现在使用的确切图像需要运行哪些确切步骤?使用docker commit 通常不是最佳做法,因为它会导致图像难以复制。您通常也根本不需要 Docker 中的 sudo,因为您始终可以在 Dockerfile 中切换到 USER root 来执行安装软件等操作。
  • 不幸的是,oracle 数据库不会以 root 身份启动。我找到了一个可以直接使用 su 的解决方法。

标签: linux docker


【解决方案1】:

我使用以下而不是 sudo。本质上,有一个入口点脚本必须提取带有数据库位的 tar(到 docker 卷中)。我在提取数据时遇到了一些权限问题。似乎docker总是将卷的所有者更改为root,我需要它成为用户oracle。无论如何,我在我的脚本中添加了这个并且它工作正常:

echo "myRootPassword" | su -c "chown oracle:oinstall /ORCL" root 

我想我仍然很好奇为什么添加 sudo 会导致这个问题,但不想再浪费时间了。

  • 您可以通过从 ubuntu 运行基础映像来复制它。
  • 将基础镜像提交到第二个镜像
  • 然后运行并 ssh 进入第二个映像并安装 sudo。
  • 最后将图像提交到第三个图像。第三张图片比第二张图片大 1GB。

【讨论】:

  • 很难相信仅仅安装了sudo 会在没有我们可以自己运行的复制器的情况下达到规定的效果。问题中确实需要minimal reproducible example - 让其他人轻松重现所述行为 - 如果您需要解释。
  • (另外,Docker 安装的细节很重要——使用 overlayfs 安装 Docker 会导致其磁盘使用量激增的原因与使用块级磁盘覆盖安装 Docker 的原因不同后端而不是文件级的)
【解决方案2】:

我想我对提交时图像如何分层存在根本性的误解。有时提交似乎创建了一个稍大的图像,有时它必须获取前一个图像并添加当前图像(12g + 12g)。我想这毕竟与 sudo 无关 - 我只是碰巧在错误的时间不断添加 sudo 所以它似乎相关。

问题是我试图构建一个数据库映像,并且很难在 1 个 Docker 文件中完成所有工作。所以我正在创建一个基本映像并使用 x11 转发在正在运行的容器中运行 oracle 安装。在静默模式下安装 Oracle DB 很痛苦,我花了最后一整天时间试图让响应文件正确。无论如何关闭这个问题,因为它与 sudo 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2019-04-21
    • 2015-07-17
    • 1970-01-01
    • 2019-02-24
    • 2022-01-08
    相关资源
    最近更新 更多