该容器镜像包含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
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务