5.7. 使用 bootc-image-builder 创建 AMI 镜像,并将其上传到 AWS
使用 bootc-image-builder 工具从 Red Hat Enterprise Linux bootc 镜像生成 Amazon Machine Image (AMI)。这可让容器原生操作系统部署为 Amazon Web Services (AWS)中的标准 EC2 实例。
-
如果使用 registry 中的容器镜像,如
registry.redhat.io/rhel10/bootc-image-builder:latest,您必须挂载一个本地存储。 -
如果使用本地构建的容器镜像,则必须包含
-v /var/lib/containers/storage:/var/lib/containers/storage参数。
先决条件
- 您已在主机机器上安装了 Podman。
-
AWS 帐户中有一个现有的
AWS S3存储桶。 -
您有运行
bootc-image-builder工具的 root 访问权限,并在--privileged模式下运行容器,以构建镜像。 -
您已在帐户中配置了
vmimport服务角色,来将 AMI 导入到 AWS 帐户中。
流程
从 bootc 镜像创建一个磁盘镜像。
- 在 Containerfile 中配置用户详情。确保为它分配 sudo 访问权限。
- 使用 Containerfile 配置中的用户构建一个自定义操作系统镜像。它会创建一个默认用户,而无需密码 sudo 访问权限。
可选:使用
cloud-init配置机器镜像。请参阅 RHEL 的镜像模式中管理文件系统。以下是一个示例:FROM quay.io/<namespace>/<image>:latest RUN dnf -y install cloud-init && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ rm -rf /var/{cache,log} /var/lib/{dnf,rhsm}注意您还可以使用
cloud-init,使用实例元数据添加用户和其他配置。构建 bootc 镜像。例如,要将镜像部署到
x86_64AWS 机器,请使用以下命令:$ podman build -t quay.io/<namespace>/<image>:<tag> . $ podman push quay.io/<namespace>/<image>:<tag> .在运行容器前,初始化
输出目录。使用-p参数来确保如果目录已存在,命令不会失败:$ mkdir -p ./output使用
bootc-image-builder工具从 bootc 容器镜像创建一个公共 AMI 镜像。镜像必须可从注册中心访问,如registry.redhat.io/rhel10/bootc-image-builder:latest。$ sudo podman run \ --rm \ --it \ --privileged \ --pull=newer \ -v ./config.toml:/config.toml \ -v /var/home/<user>/.aws:/root/.aws \ --env AWS_PROFILE=default \ registry.redhat.io/rhel10/bootc-image-builder:latest \ --type ami \ --config /config.toml \ --aws-ami-name rhel-bootc-x86 \ --aws-bucket rhel-bootc-bucket \ --aws-region us-east-1 \ quay.io/<namespace>/<image>:<tag>以下标记必须一起指定。如果没有指定任何标记,AMI 被导出到 output 目录中。
-
--AWS-ami-name- AWS 中 AMI 镜像的名称 -
--AWS-bucket- 创建 AMI 时中间存储的目标 S3 存储桶名称 --AWS-region- 用于AWS 上传的目标区域bootc-image-builder工具使用 AWS 凭证在您的 AWS S3 存储桶中构建、上传和注册 AMI 镜像。
-
后续步骤
- 您可以部署镜像。请参阅 使用 AMI 磁盘镜像将容器镜像部署到 AWS。
- 您可以对镜像进行更新,并将更改推送到注册中心。请参阅 管理 RHEL bootc 镜像。
故障排除
如果您在为 AWS 镜像配置要求时遇到问题,请参阅以下文档:
其他资源