gpt4 book ai didi

docker - 在 docker build 期间挂载 CDROM 存储库

转载 作者:行者123 更新时间:2023-12-02 19:51:59 24 4
gpt4 key购买 nike

我正在构建一个 docker 镜像,其中还涉及一个小的 yum install .我目前在防火墙和访问控制使docker pull 的位置。 , yum install等非常慢。

在我的例子中,它是一个使用 official image script 的 JRE8 docker 镜像。

我的问题:

构建镜像只需要 2 个库 (gzip + tar),它们的组合只有 (132 kB + 865 kB)。但是 docker build 脚本中的 yum 会首先下载超过 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 容器无法访问主机设备。我认为您必须围绕 docker build 命令编写一个包装脚本才能执行以下操作

  • 首先将 CD ROM 挂载到 docker 上下文中的目录(这将是 DockerFile 所在的子目录)。
  • 使用此目录中的内容调用 docker build 命令
  • 卸载 CD ROM。

  • 所以,
    cd docker_build_dir
    mkdir cdrom
    mount /dev/cdrom cdrom
    docker build "$@" .
    umount cdrom

    在 DockerFile 中,您可以简单地执行以下操作:
    RUN cd cdrom && rpm -ivh rpms_you_need

    关于docker - 在 docker build 期间挂载 CDROM 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60033236/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com