Cómo instalar el paquete rpm en la imagen de Docker

prefacio

Cuando construimos un contenedor espejo, es posible que las herramientas que el contenedor necesita usar no estén incluidas en la imagen básica. En este momento, debemos agregar manualmente estas herramientas de software a la imagen de Docker. Aquí hemos resuelto estos escenarios de aplicación en práctica.

Por ejemplo, cuando realizamos pruebas de rendimiento, a menudo tenemos muchos problemas que requieren herramientas como JPS y JSTACK para ayudar a analizar.Si todas las aplicaciones son servicios en contenedores y se usa el openjdk que viene con centos, es posible que estas herramientas no estén disponibles. En este momento, necesitamos Introducir e instalar el paquete openjdk-devel.

La imagen de nuestra aplicación depende de la construcción y generación de la imagen base, y complementa las herramientas de software para la imagen de la ventana acoplable. Aquí hay dos formas de referencia:


Método 1, instalación en línea de 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"]

Nota: este método ejecuta principalmente el comando yum install en el contenedor en la línea 8 para completar la instalación. Sin embargo, durante el proceso de ejecución, la instalación de yum puede fallar debido a la inaccesibilidad de la fuente yum en el contenedor.
Si se puede acceder normalmente a la fuente mirror yum, puede ejecutar el siguiente comando en el contenedor para probar:

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

Si no se puede acceder normalmente a la fuente yum en el contenedor, pero se puede acceder normalmente a la fuente yum de la máquina host, realice los pasos para reemplazar el archivo fuente yum de la máquina host en el contenedor para completar la instalación normal del software rpm. . Para el proceso de reemplazo, consulte las líneas 4 a 7 del ejemplo de Dockerfile.

El modo de red del contenedor ps.Docker generalmente adopta el modo puente. Si la máquina host normalmente puede acceder a la fuente yum, el contenedor también puede acceder a la fuente yum de la red externa confiando en la traducción de direcciones NAT de la máquina host.

Método 2. Instalación sin conexión

Si la fuente del contenedor yum está bloqueada y el yum de la máquina host no se puede usar normalmente, también podemos considerar el método de instalación fuera de línea en este momento, es decir, encontrar un host que yum use normalmente, descargar el rpm especificado paquete de instalación y transfiéralo al empaquetador Instalación fuera de línea a través de DOCKERFILE

Paso 1. Descarga del paquete: descargue el paquete de instalación en un host que pueda usar yum normalmente

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

Paso 2. Transplante el paquete de instalación de rpm al host de compilación espejo a través del comando scp
2.1 Copiar al servidor remoto

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

2.2 Copiar desde servidor remoto

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

Paso 3. Modifique el Dockerfile para trasplantar el paquete de software al contenedor y realizar la operación de instalación

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"]

Resumir

Este artículo presenta brevemente dos formas de instalar el software rpm en la imagen del contenedor a través de yum. El método fuera de línea generalmente no se recomienda. Al descargar algunos paquetes de instalación rpm complejos, sus dependencias ambientales se ven afectadas por el host y los paquetes dependientes relevantes pueden ser inexactos. Al instalar fuera de línea en el contenedor, puede haber fallas y, por lo general, se le da prioridad al método 1.

Supongo que te gusta

Origin blog.csdn.net/zhzh980/article/details/129332911
Recomendado
Clasificación