如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该容器镜像包含Ruby 2.6,作为https://github.com/openshift/source-to-image%E5%9F%BA%E7%A1%80%E9%95%9C%E5%83%8F%EF%BC%8C%E7%94%A8%E4%BA%8E%E6%9E%84%E5%BB%BA%E5%92%8C%E8%BF%90%E8%A1%8CRuby 2.6应用程序。用户可选择基于RHEL、CentOS或Fedora的构建器镜像:RHEL镜像可在Red Hat容器目录获取,CentOS镜像在Quay.io,Fedora镜像在Fedora Registry。生成的镜像可使用https://github.com/containers/libpod%E8%BF%90%E8%A1%8C%E3%80%82
注意:本文档示例中使用
podman命令,所有此类命令均可替换为docker,参数保持不变。
假设使用ubi8/ruby-26镜像(通过OpenShift中的ruby:2.6镜像流标签可用),构建简单https://github.com/sclorg/s2i-ruby-container/tree/master/2.6/test/puma-test-app%E5%BA%94%E7%94%A8%E7%9A%84%E6%AD%A5%E9%AA%A4%E5%A6%82%E4%B8%8B%EF%BC%9A
bashoc new-app ruby:2.6~https://github.com/sclorg/rails-ex.git
访问应用:
bash$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
该镜像支持OpenShift的源到镜像(S2I)构建策略,核心脚本包括:
相比S2I策略,Dockerfile提供更灵活的构建方式,适用于S2I不够灵活或在OpenShift外构建的场景。步骤如下:
1. 拉取基础构建器镜像
bashpodman pull ubi8/ruby-26
本例使用RHEL7镜像ubi8/ruby-26。
2. 获取应用代码
以示例应用https://github.com/sclorg/rails-ex.git%E4%B8%BA%E4%BE%8B%EF%BC%9A
bashgit clone https://github.com/sclorg/rails-ex.git app-src
3. 在容器中准备应用
包含三个核心操作:放置应用源码、安装依赖、设置默认命令。支持两种方式:
3.1 使用S2I脚本构建
创建如下Dockerfile:
dockerfileFROM ubi8/ruby-26 # 添加应用源码到assemble脚本预期目录,并设置权限(使容器无需root运行) USER 0 ADD app-src /tmp/src RUN chown -R 1001:0 /tmp/src USER 1001 # 设置开发模式 ENV RAILS_ENV=development # 安装依赖 RUN /usr/libexec/s2i/assemble # 设置默认命令 CMD /usr/libexec/s2i/run
3.2 手动配置构建
创建如下Dockerfile:
dockerfileFROM ubi8/ruby-26 USER 0 ADD app-src ./ RUN bundle install --path ./bundle CMD bundle exec "rackup -P /tmp/rack.pid --host 0.0.0.0 --port 8080"
4. 构建镜像
bashpodman build -t ruby-app .
5. 运行应用镜像
bashpodman run -d ruby-app
可在源码仓库的.s2i/environment文件中定义键值对设置环境变量:
RACK_ENV
指定应用部署环境(production、development、test),不同环境在日志详细程度、错误页面、gem安装等方面有不同行为。
注意:仅当
RACK_ENV为production时才会编译应用资产。
DISABLE_ASSET_COMPILATION
设置为true时跳过资产编译,仅在production环境下生效,适用于资产已预编译的场景。
PUMA_MIN_THREADS、PUMA_MAX_THREADS
指定https://github.com/puma/puma%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E6%9C%80%E5%B0%8F%E5%92%8C%E6%9C%80%E5%A4%A7%E7%BA%BF%E7%A8%8B%E6%95%B0%E3%80%82
PUMA_WORKERS
指定启动的工作进程数,详见Puma的https://github.com/puma/puma#clustered-mode%E6%96%87%E6%A1%A3%E3%80%82
RUBYGEM_MIRROR
设置自定义RubyGems镜像URL,用于构建过程中下载gem包。
要动态获取应用源码变更,需执行以下步骤:
运行构建的Rails镜像时,通过-e参数传递RAILS_ENV=development:
bash$ podman run -e RAILS_ENV=development -p 8080:8080 rails-app
需使用支持源码变更自动重载的gem,如:
需修改https://github.com/openshift/source-to-image#anatomy-of-a-builder-image%EF%BC%8C%E4%BD%BFWeb%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E8%BF%87%E4%B8%8A%E8%BF%B0gem%E5%90%AF%E5%8A%A8%E4%BB%A5%E6%A3%80%E6%B5%8B%E6%BA%90%E7%A0%81%E5%8F%98%E6%9B%B4%E3%80%82%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%E5%90%8E%EF%BC%8C%E8%BF%90%E8%A1%8C%E6%97%B6%E4%BC%A0%E9%80%92%60RACK_ENV=development%60%EF%BC%9A
bash$ podman run -e RACK_ENV=development -p 8080:8080 sinatra-app
使用Podman的https://github.com/containers/libpod%E5%91%BD%E4%BB%A4%E8%BF%9B%E5%85%A5%E5%AE%B9%E5%99%A8%EF%BC%9A
bash$ podman exec -it <容器ID> /bin/bash
进入容器后,当前目录为/opt/app-root/src(源码存放目录)。
通过PUMA_MIN_THREADS和PUMA_MAX_THREADS调整线程数,工作进程数默认根据可用CPU核心数(基于cgroup cpusets子系统)确定。可通过--cpuset-cpus参数指定容器允许使用的CPU核心:
bash$ podman run -e PUMA_MAX_THREADS=32 --cpuset-cpus='0-2,3,5' -p 8080:8080 sinatra-app
工作进程数同时受内存限制(通过cgroup强制执行)影响。镜像默认假设基础内存需求为50 MiB,每个工作进程额外需15 MiB,每个线程需128 KiB。总内存需求计算公式:
50 + 15 * 工作进程数 + 0.125 * 工作进程数 * PUMA_MAX_THREADS
可通过--memory参数指定内存限制:
bash$ podman run -e PUMA_MAX_THREADS=32 --memory=300m -p 8080:8080 sinatra-app
若内存限制比CPU核心数更严格,工作进程数会按上述公式自动缩减。也可通过PUMA_WORKERS显式设置工作进程数。
Dockerfile及其他源码可在https://github.com/sclorg/s2i-ruby-container%E8%8E%B7%E5%8F%96%EF%BC%8C%E4%BB%93%E5%BA%93%E4%B8%AD%E5%8C%85%E5%90%AB%E5%85%B6%E4%BB%96%E7%89%88%E6%9C%ACRuby%E7%8E%AF%E5%A2%83%E7%9A%84Dockerfile%EF%BC%9ACentOS%E5%AF%B9%E5%BA%94%60Dockerfile%60%EF%BC%8CRHEL7%E5%AF%B9%E5%BA%94%60Dockerfile.rhel7%60%EF%BC%8CRHEL8%E5%AF%B9%E5%BA%94%60Dockerfile.rhel8%60%EF%BC%8CFedora%E5%AF%B9%E5%BA%94%60Dockerfile.fedora%60%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务