如何向Docker镜像安装rpm软件包

这篇具有很好参考价值的文章主要介绍了如何向Docker镜像安装rpm软件包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我们在构建镜像容器的时候,容器需要使用的工具,可能在基础镜像中并没有,这时候就需要我们人工的向Docker镜像中补充这些软件工具,这里对这些应用场景进行了实践梳理。

例如,我们在性能测试的时候,往往有很多问题需要JPS、JSTACK等工具帮助分析,如果所有应用都是容器化服务,采用的又是centos自带的openjdk,可能并没有这些工具,这时候需要我们引入安装openjdk-devel包。

我们的应用镜像依赖于基础镜像构建生成,向docker镜像中补充软件工具,这里提供了两种方式作参考:


方式一、Dockerfile在线安装

From centos-77-base:1.0
COPY demo.jar /root/app.jar
COPY run.sh /root
RUN cd /etc/yum.repos.d/
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 前置操作:将宿主机的yum源文件拷到当前repo目录中,对镜像yum源进行替换
COPY ./repo/* /etc/yum.repos.d/
RUN yum -y install java-1.8.0-openjdk-devel.x86_64

ENTRYPOINT ["sh", "/root/run.sh"]

注意:该方式主要通过第8行在容器中执行yum intall命令完成安装,但是在执行的过程中,可能因为容器内yum源无法访问的问题,导致yum install失败。
镜像yum源能否正常访问,可以在容器中执行下列命令测试:

# 列出软件包详情列表
yum list
# 列出制定软件,可以过滤
yum list | grep xxx

如果容器内yum源无法正常访问,但是宿主机的yum源访问正常,执行步骤将宿主机的yum源文件替换到容器内部,来完成rpm软件的正常安装。替换过程参考Dockerfile示例的4-7行。

ps.Docker容器网络模式一般采用桥接模式,如果宿主机可以对yum源进行正常访问,容器依托宿主机NAT地址转换,也是可以对外部网络yum源进行访问的。

方式二、离线安装

如果容器yum源不通,宿主机的yum也无法正常使用,这时候我们也可以考虑离线安装的方式,即找一台yum正常使用的主机,将指定的rpm安装包下载下来,传到打包机中通过DOCKERFILE进行离线安装

Step1.软件包下载:在一台可以正常使用yum的主机上下载安装包

yumdownloader java-1.8.0-openjdk-devel.x86_64
# 加上参数的示例
# -destdir(下载的软件包存放路径)
# -resolve(解决依赖关系并下载所需的包)
yumdownloader --destdir=/tmp --resolve xxx

Step2.将该rpm安装包通过scp命令移植到镜像构建主机中
2.1复制到远程服务器

# 复制文件
scp ./java-1.8.0-openjdk-devel.x86_64.rpm root@10.1.1.34:/home
# 复制目录的话,加上-r参数,示例如下:
scp -r tmp root@10.1.1.34:/home

2.2从远程服务器复制

# 从远程复制文件
scp root@10.1.1.34:/tmp/java-1.8.0-openjdk-devel.x86_64.rpm /home
# 从远端复制目录的话,加上-r参数,示例如下:
scp -r root@10.1.1.34:/tmp /home

Step3.修改Dockerfile将该软件包移植到容器内部,并执行安装操作

From centos-77-base:1.0
COPY demo.jar /root/app.jar
COPY run.sh /root
ADD java-1.8.0-openjdk-devel.x86_64.rpm /root
RUN cd /root && rpm -ivh java-1.8.0-openjdk-devel.x86_64.rpm --force --nodeps

ENTRYPOINT ["sh", "/root/run.sh"]

总结

本文简单介绍了容器镜像通过yum方式安装rpm软件的两种方式,离线方式一般不推荐,有些较为复杂的rpm安装包在下载的时候,其环境依赖受主机影响,相关依赖包可能不准确,向容器中离线安装时,有出现失败的情况,一般优先考虑方式一进行。文章来源地址https://www.toymoban.com/news/detail-460509.html

到了这里,关于如何向Docker镜像安装rpm软件包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker报错 missing signature key 无法拉去镜像,yum install docker-ce没有可用软件包 解决办法

    错误场景描述 今天项目需要用到minio,我打算在虚拟机中使用 docker 装一个,可是发现当我 docker pull minio/minio 的时候,报错了 missing signature key 这个报错提示的让人很蒙,翻译过来的意思是 “缺少签名密钥” ??? 我原本以为,是不是docker发生了什么变动,需要登录之类的

    2024年01月19日
    浏览(51)
  • 问题:E: 软件包 docker-ce 没有可安装候选 E: 无法定位软件包 docker-ce-cli ......

    最近在vmware上新建了一个ubuntu20.04,出现了上图问题。sudo apt-get update 后依然无法解决 查了一些博客,有的说依次找到 Software Updates - Other SoftWare 找到会发现报错的网址就在此处并取消勾选,但在我的环境上根本就没有找不到报错的网址;也有说进入/etc/apt/sources.list.d/ 目录 ,

    2024年02月03日
    浏览(89)
  • 【Linux的开胃小菜】常用的RPM软件包与YUM仓库包管理器使用

    systemd与System V init的区别以及作用: System V init运行级别 systemd目标名称 systemd目标作用 0 poweroff.target 关机 1 rescue.target 单用户模式 2 multi-user.target 多用户的文本界面 3 multi-user.target 多用户的文本界面 4 multi-user.target 多用户的文本界面 5 graphical.target 多用户的图形界面 6 reboot.t

    2024年02月13日
    浏览(62)
  • 关于Deepin安装docker时遇到E: 无法定位软件包 docker-buildx-plugin 以及 E: 无法定位软件包 docker-compose-plugin 的解决办法

    操作系统:Deepin20.9 使用电脑:Dell G15 按照https://docs.docker.com/engine/install/debian/的教程,正在完成如图所示操作时 报以下错误   我们知道我们是按照Debian10去安装Docker的, 此时我的soucelist如图所示: souecelist文件路径:/etc/apt/  在更新apt-get的 过程中,发现   debian有名叫apric

    2024年02月16日
    浏览(67)
  • Linux rpm命令查询软件包(-q、-qa、-i、-p、-l、-f、-R)

    使用 rpm 做查询命令的格式如下: [root@localhost ~]# rpm 选项 查询对象 用 rpm 查询软件包是否安装的命令格式为: [root@localhost ~]# rpm -q 包名 -q 表示查询,是 query 的首字母。 例如,查看 Linux 系统中是否安装 apache,rpm 查询命令应写成: [root@localhost ~]# rpm -q httpd 注意这里使用的是

    2024年02月10日
    浏览(43)
  • Mac ❀ 如何在MacOS上安装pip软件包

    以 requests 工具包为例:

    2024年01月18日
    浏览(60)
  • 如何验证 ubuntu 系统中是否已经安装过某个软件包?

    在 Ubuntu 上,可以使用 dpkg 命令来验证某个软件包是否已经安装。 打开终端。 输入以下命令: 例如,如果要验证 vim 是否已安装,可以输入: 按下 Enter 键运行命令。 如果软件包已安装,你将看到关于该软件包的详细信息,包括版本号等,这里以查询 vim 为例,截图如下:

    2024年02月11日
    浏览(62)
  • 如何列出 Ubuntu 和 Debian 上已安装的软件包

    当你安装了 Ubuntu 并想好好用一用。但在将来某个时候,你肯定会遇到忘记曾经安装了那些软件包。 这个是完全正常。没有人要求你把系统里所有已安装的软件包都记住。但是问题是,如何才能知道已经安装了哪些软件包?如何查看安装过的软件包呢? 如果你经常用 apt 命令

    2024年02月07日
    浏览(61)
  • 如何把openwrt的ipk软件包安装到ubuntu上

    前提:都是arm64的架构的软件包。 下载openwrt的ipk软件包 1. 从https://pkgs.org/ 查找下载软件包: 本文以swconfig软件包为例,下载swconfig和相关的依赖软件包: swconfig_12_aarch64_cortex-a72.ipk libuci20130104_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk libubox20220515_2022-05-15-d2223ef9-1_aarch64_cortex-a72.ipk l

    2024年01月25日
    浏览(53)
  • 在linux下如何使用yum命令查看安装了哪些软件包

    Linux 系统下 yum 命令查看安装了哪些软件包: 1. 使用 yum 查找软件包 命令: 2. 列出所有可安装的软件包 命令: 3. 列出所有可更新的软件包 命令: 4. 列出所有已安装的软件包 命令: 5. 列出所有已安装但不在 Yum Repository 内的软件包 命令: 6. 使用 yum 获取软件包信息 命令:

    2024年02月02日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包