如何向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安装包在下载的时候,其环境依赖受主机影响,相关依赖包可能不准确,向容器中离线安装时,有出现失败的情况,一般优先考虑方式一进行。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值