rpm パッケージを Docker イメージにインストールする方法

序文

ミラー コンテナを構築するとき、コンテナが使用する必要があるツールが基本イメージに含まれていない可能性があります.この時点で、これらのソフトウェア ツールを手動で Docker イメージに追加する必要があります.ここでは、これらのアプリケーション シナリオを練習。

たとえば、パフォーマンス テストを行う場合、分析に JPS や JSTACK などのツールが必要な問題が多く発生しますが、すべてのアプリケーションがコンテナー化されたサービスであり、centos に付属の openjdk を使用している場合、これらのツールが使用できない場合があります。この時点で、openjdk-devel パッケージを導入してインストールする必要があります。

私たちのアプリケーション イメージは、ベース イメージの構築と生成に依存し、docker イメージにソフトウェア ツールを追加します。


方法 1、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 install コマンドを実行してインストールを完了しますが、実行プロセス中に、コンテナー内の yum ソースにアクセスできないために yum install が失敗する場合があります。
ミラー yum ソースに正常にアクセスできるかどうかは、コンテナーで次のコマンドを実行してテストできます。

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

コンテナー内の yum ソースには正常にアクセスできないが、ホスト マシンの yum ソースには正常にアクセスできる場合は、ホスト マシンの yum ソース ファイルをコンテナーに置き換える手順を実行して、rpm ソフトウェアの正常なインストールを完了します。 . 置換プロセスについては、Dockerfile の例の 4 ~ 7 行目を参照してください。

ps.Docker コンテナ ネットワーク モードは一般的にブリッジ モードを採用しており、ホスト マシンが正常に yum ソースにアクセスできる場合、コンテナもホスト マシンの NAT アドレス変換に依存して外部ネットワークの yum ソースにアクセスできます。

方法 2. オフライン インストール

コンテナー yum のソースがブロックされ、ホスト マシンの yum が正常に使用できない場合は、この時点でオフライン インストール方法、つまり、通常 yum で使用されるホストを見つけて、指定された rpm をダウンロードすることも検討できます。インストール パッケージを作成し、それをパッカーに転送する DOCKERFILE を介したオフライン インストール

Step1. パッケージのダウンロード: yumが正常に利用できるホストにインストールパッケージをダウンロード

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

Step2. scpコマンドでrpmインストールパッケージをミラービルドホストに移植
2.1 リモートサーバーにコピー

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

2.2 リモートサーバーからのコピー

# 从远程复制文件
scp [email protected]:/tmp/java-1.8.0-openjdk-devel.x86_64.rpm /home
# 从远端复制目录的话,加上-r参数,示例如下:
scp -r [email protected]:/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 ソフトウェアをインストールする 2 つの方法を簡単に紹介します. オフラインの方法は一般的にお勧めしません. 複雑な rpm インストール パッケージをダウンロードする場合、それらの環境依存関係はホストの影響を受け、関連する依存パッケージが不正確になる可能性があります. . コンテナーにオフラインでインストールする場合、失敗する可能性があり、一般的には方法 1 が優先されます。

おすすめ

転載: blog.csdn.net/zhzh980/article/details/129332911