【发布时间】:2020-02-03 13:07:58
【问题描述】:
我正在构建一个 docker 映像,其中还涉及一个小的 yum install。我目前处于防火墙和访问控制使docker pull、yum install 等非常慢的位置。
在我的例子中,它是一个使用 official image script 的 JRE8 docker 映像
我的问题:
构建映像只需要 2 个库 (gzip + tar),它们的组合只有 (132 kB + 865 kB)。但是 yum 里面的 docker build 脚本会首先下载超过 80 MB 的 repo 信息。虽然 80 MB 通常很小,但在这里,仅下载就需要 1 个多小时。如果我的同事需要构建,这将完全是浪费生产时间,更不用说沮丧了。
我知道的解决方法:
- 因为这个镜像可能不需要完整的 yum 功能,我可以简单地抓取 *.rpm 文件,在容器脚本中
COPY并使用rpm -i而不是yum - 我可以保存构建的图像并在本地分发
- 我还可以找到最接近 docker-hub 的镜像,但不是 yum
我的赌注:
- 我有一个版本大致相同的 linux CD 副本
- 我可以在 dockerfile 中添加命令以将 *.repo 重命名为 *.repo.old
- 在容器内的 /etc/yum.repos.d/ 中添加一个 cdrom.repo
- 使用 yum 从 CDROM 而不是 Internet 加载最常用的库
我的问题:
我无法弄清楚如何在不使用 httpd 的情况下从容器构建内部创建到 cdrom 存储库的挂载点。
在普通的 linux 中我这样做:
mkdir /cdrom
mount /dev/cdrom /cdrom
cat > /etc/yum.repos.d/cdrom.repo <<EOF
[cdrom]
name=CDROM Repo
baseurl=file:///cdrom
enabled=1
gpgcheck=1
gpgkey=file:///cdrom/RPM-GPG-KEY-oracle
EOF
任何帮助表示赞赏。
【问题讨论】:
-
你有内部 docker 注册表吗?
-
@YuriG。没有内部 docker 注册表,使用附近的 docker 镜像进行了很多努力,尽管速度很慢。但这个问题与附近没有镜像的 yum 存储库有关。
-
您是否尝试在主机上挂载 cdrom 并从挂载的文件夹中复制文件?
-
@YuriG。我可以这样做,但是如果存在包依赖项(尽管在这种特定情况下没有),rpm 执行将失败。