
payt/rubyRuby Docker镜像是由Docker官方维护的标准化容器镜像,基于Debian或Alpine等基础系统构建,集成了Ruby编程语言运行环境及相关工具链。该镜像旨在为Ruby应用开发、测试和部署提供一致、隔离的运行环境,支持多种Ruby版本和架构,适用于从简单脚本到复杂Web应用(如Ruby on Rails)的容器化需求。
ruby:<version>:基于Debian Bullseye,包含完整系统依赖,适合生产环境。ruby:<version>-slim:基于Debian Bullseye Slim,精简系统组件,减少镜像体积(比完整版小约40%)。ruby:<version>-alpine:基于Alpine Linux,极致精简(体积通常<100MB),适合资源受限场景,但需注意musl libc与glibc的兼容性差异。ruby:<version>-bullseye/-bookworm:指定Debian具体发行版,确保依赖稳定性。gem包管理器及bundler依赖管理工具。gem install直接安装RubyGems,bundle install解析Gemfile依赖。-slim或-alpine变体)。通过Docker Hub拉取镜像,格式为:
bashdocker pull ruby:<tag>
标签(tag)说明:
标签格式为<ruby-version>-<variant>,例如:
3.3:Ruby 3.3,基于Debian Bullseye完整版。3.2-slim:Ruby 3.2,基于Debian Slim。3.1-alpine3.19:Ruby 3.1,基于Alpine 3.19。3.3.0-bullseye:Ruby 3.3.0,指定Debian Bullseye发行版。完整标签列表可参考Docker Hub Ruby镜像页。
启动Ruby交互式解释器(irb):
bashdocker run -it --rm ruby:3.3 irb
-it:交互式终端。--rm:退出后自动删除容器。执行当前目录下的script.rb:
bash# 假设本地存在 script.rb(如:puts "Hello, Docker!") docker run --rm -v "$PWD":/app -w /app ruby:3.3 ruby script.rb
-v "$PWD":/app:将当前目录挂载到容器内/app目录。-w /app:设置工作目录为/app。在Rails应用根目录创建Dockerfile:
dockerfile# 基于slim变体减少体积 FROM ruby:3.3-slim # 安装系统依赖(Rails需Node.js、Yarn等) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ nodejs \ yarn \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 复制Gemfile及依赖锁文件,优先安装gem依赖(利用Docker层缓存) COPY Gemfile Gemfile.lock ./ RUN bundle install --jobs 4 --retry 3 # 复制应用代码 COPY . . # 预编译资产(如CSS/JS) RUN bundle exec rails assets:precompile # 暴露Rails默认端口 EXPOSE 3000 # 启动命令 CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
bash# 构建镜像 docker build -t my-rails-app . # 运行容器(映射3000端口) docker run -p 3000:3000 my-rails-app
适用于开发环境(含数据库联动),创建docker-compose.yml:
yamlversion: '3.8' services: rails-app: build: . ports: - "3000:3000" volumes: - .:/app:cached # 本地代码挂载(实时同步修改) - gem_cache:/usr/local/bundle # 缓存gem依赖(加速重建) environment: - RAILS_ENV=development - DATABASE_URL=postgres://postgres:postgres@db:5432/myapp_development depends_on: - db db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=myapp_development volumes: gem_cache: # 持久化gem缓存 postgres_data: # 持久化数据库数据
启动服务:
bashdocker-compose up --build
| 变量名 | 说明 | 默认值 |
|---|---|---|
BUNDLE_PATH | bundle install的依赖安装路径 | /usr/local/bundle |
BUNDLE_BIN | bundle binstubs生成路径 | $BUNDLE_PATH/bin |
RAILS_ENV | Rails环境(开发/测试/生产) | development(开发环境) |
RACK_ENV | Rack应用环境(如Sinatra) | development |
GEM_HOME | RubyGems安装路径 | 同BUNDLE_PATH |
标签通常由<ruby-version>-<variant>-<distro-version>组成,例如:
3.3.0:Ruby 3.3.0,基于Debian Bullseye完整版。3.2-slim:Ruby 3.2.x最新补丁版,基于Debian Bullseye Slim。3.1.4-alpine3.19:Ruby 3.1.4,基于Alpine 3.19。nokogiri旧版本)可能需要额外配置(如安装musl-dev、gcc)。3.3.0-slim而非3.3),避免自动更新导致兼容性问题。--rm参数,配合日志收集工具(如ELK)保留容器日志。Gemfile和Gemfile.lock,利用Docker层缓存减少重复安装依赖耗时。--user指定非root用户运行容器,降低权限风险(需在Dockerfile中创建用户)。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务