在 docker 构建期间安装 CDROM 存储库
Mount-ing a CDROM repo during docker build
我正在构建一个 docker 图像,其中还包含一个小的 yum install
。我目前所在的位置,防火墙和访问控制使 docker pull
、yum install
等速度极慢。
在我的例子中,它是使用此 official image script
的 JRE8 docker 图像
我的问题:
构建图像只需要 2 个库 (gzip + tar),它们的总和仅为 (132 kB + 865 kB)。但是 docker 构建脚本中的 yum 会首先下载超过 80 MB 的 repo 信息。虽然 80 MB 通常很小,但在这里,仅下载就花费了 1 个多小时。如果我的同事需要构建,这纯粹是在浪费生产时间,更不用说挫败感了。
我知道的解决方法:
- 由于此映像可能不需要完整的 yum 功能,我可以简单地获取 *.rpm 文件,
COPY
在容器脚本中并使用 rpm -i
而不是 yum
- 我可以保存构建的镜像并在本地分发
- 我也可以为 docker-hub 找到最近的镜像,但不是 yum
我的赌注:
- 我有 linux CD 的副本,其版本大致相同
- 我可以在 docker 文件中添加命令以将 *.repo 重命名为 *.repo.old
- 在/etc/yum.repos.d/容器里面添加一个cdrom.repo
- 使用 yum 从 CDROM 而不是互联网加载最常用的库
我的问题:
我无法弄清楚如何在不使用 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 构建命令编写一个包装脚本来执行以下操作
- 首先将 CD ROM 挂载到 docker 上下文中的目录(这将是您的 Docker 文件所在的子目录)。
- 使用此目录中的内容调用 docker 构建命令
- 卸载 CD ROM。
所以,
cd docker_build_dir
mkdir cdrom
mount /dev/cdrom cdrom
docker build "$@" .
umount cdrom
在 Docker 文件中,您可以简单地这样做:
RUN cd cdrom && rpm -ivh rpms_you_need
我正在构建一个 docker 图像,其中还包含一个小的 yum install
。我目前所在的位置,防火墙和访问控制使 docker pull
、yum install
等速度极慢。
在我的例子中,它是使用此 official image script
的 JRE8 docker 图像我的问题:
构建图像只需要 2 个库 (gzip + tar),它们的总和仅为 (132 kB + 865 kB)。但是 docker 构建脚本中的 yum 会首先下载超过 80 MB 的 repo 信息。虽然 80 MB 通常很小,但在这里,仅下载就花费了 1 个多小时。如果我的同事需要构建,这纯粹是在浪费生产时间,更不用说挫败感了。
我知道的解决方法:
- 由于此映像可能不需要完整的 yum 功能,我可以简单地获取 *.rpm 文件,
COPY
在容器脚本中并使用rpm -i
而不是yum
- 我可以保存构建的镜像并在本地分发
- 我也可以为 docker-hub 找到最近的镜像,但不是 yum
我的赌注:
- 我有 linux CD 的副本,其版本大致相同
- 我可以在 docker 文件中添加命令以将 *.repo 重命名为 *.repo.old
- 在/etc/yum.repos.d/容器里面添加一个cdrom.repo
- 使用 yum 从 CDROM 而不是互联网加载最常用的库
我的问题:
我无法弄清楚如何在不使用 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 构建命令编写一个包装脚本来执行以下操作
- 首先将 CD ROM 挂载到 docker 上下文中的目录(这将是您的 Docker 文件所在的子目录)。
- 使用此目录中的内容调用 docker 构建命令
- 卸载 CD ROM。
所以,
cd docker_build_dir
mkdir cdrom
mount /dev/cdrom cdrom
docker build "$@" .
umount cdrom
在 Docker 文件中,您可以简单地这样做:
RUN cd cdrom && rpm -ivh rpms_you_need