问题描述
在一个运行着镜像quay.io/keycloak/keycloak:21.1.1
的容器中,通过cat /etc/os-release
命令得知其操作系统信息如下(摘录):
NAME="Red Hat Enterprise Linux"
VERSION="9.1 (Plow)"
CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos"
在这个容器中,没有安装openssl
和yum
,尝试执行yum install openssl
命令会显示”command not found”。用户想知道在这种镜像中如何安装OpenSSL(也许这是一个UBI微映像)。
解决方案
请注意以下操作可能涉及版本差异或风险,务必谨慎操作。
最佳解决方案
该Keycloak镜像quay.io/keycloak/keycloak:21.1.1
目前基于Red Hat Universal Base Image(UBI)ubi9-micro
,这个映像中没有安装任何包管理器(如dnf
、rpm
、yum
),以减小映像大小。
在没有包管理器的情况下,仍然有一些技巧可以安装软件包,其中一种涉及到使用buildah mount
命令,另一种涉及到使用多阶段构建和yum install --installroot /mnt/rootfs
命令。在这里,我将重点介绍第二种方法,因为它适用于您的情况。
以下是使用多阶段构建来安装OpenSSL的步骤:
1. 创建一个Dockerfile,以构建您自己的定制镜像。以下是一个示例的Dockerfile:
# 第一阶段:使用ubi9-micro作为基础映像
FROM registry.access.redhat.com/ubi9/ubi-minimal AS builder
# 安装OpenSSL到临时目录
RUN microdnf install -y openssl && \
mkdir /openssl && \
cp -r /usr/lib64/openssl /openssl
# 第二阶段:使用ubi9-micro作为基础映像
FROM registry.access.redhat.com/ubi9/ubi-minimal
# 从第一阶段复制安装好的OpenSSL
COPY --from=builder /openssl /usr/lib64/openssl
# 设置工作目录等其他配置
WORKDIR /app
# 在此继续添加您的应用配置和命令
- 执行以下命令来构建您的定制镜像:
docker build -t custom_keycloak:1.0 .
- 使用您的定制镜像运行容器:
docker run -d --name keycloak_with_openssl custom_keycloak:1.0
通过以上步骤,您将创建一个新的定制镜像,其中包含了安装好的OpenSSL。
请注意,这个解决方案在多阶段构建中分成两个阶段。第一阶段用于安装OpenSSL并将其复制到临时目录。第二阶段则将第一阶段安装好的OpenSSL复制到正式的ubi9-micro映像中,从而实现在没有yum的情况下安装OpenSSL的目标。
重要提示: 在操作过程中,务必注意版本差异和风险,确保备份重要数据。如果涉及到生产环境,请谨慎测试以确保一切正常。