当前位置:   article > 正文

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

rpm安装docker

前言

我们在构建镜像容器的时候,容器需要使用的工具,可能在基础镜像中并没有,这时候就需要我们人工的向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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

如果容器内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
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4

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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/255952
推荐阅读
相关标签
  

闽ICP备14008679号