Docker部署ruby:新手也能上手

为什么要用 Docker 部署 Ruby

很多新手在本地装 Ruby 时会遇到版本冲突或系统依赖缺失的问题。Docker 部署 Ruby 可以把整个运行环境封装成一个镜像,让你在不同服务器上都能保持一致。
而且即使你完全不会 Ruby,只要会几个 Docker 命令也能把环境跑起来。

准备工作:确认服务器已安装 Docker

在开始 Docker 部署 Ruby 之前,先用 SSH 登录服务器,运行下面命令检查 Docker 是否存在:

docker --version

如果返回版本号,说明 Docker 已安装。
如果提示 command not found,需要先安装 Docker(CentOS 示例):

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

安装后再次执行 docker --version 确认。

拉取 Ruby 镜像并运行容器(分步拆解)

1. 拉取官方 Ruby 镜像

使用 docker pull 命令拉取最新稳定版:

docker pull ruby:3.3

建议指定版本号,避免之后因为镜像更新导致不一致。
这里以 3.3 为例。

2. 创建项目目录并运行容器

假设你的 Ruby 项目放在 /home/myapp 目录下,我们希望把代码挂载到容器里运行:

mkdir -p /home/myapp
cd /home/myapp

然后启动容器,并进入交互式 Shell:

docker run -it --rm -v "$PWD":/app -w /app ruby:3.3 bash
  • -it:交互模式
  • --rm:退出容器后自动删除临时容器(适合测试)
  • -v "$PWD":/app:将当前目录挂载到容器内的 /app
  • -w /app:设置工作目录

现在就进入了容器内部,可以执行 Ruby 命令了。

3. 测试 Ruby 是否可用

在容器内运行:

ruby --version

输出应该类似 ruby 3.3.0
还可以写一个简单的脚本测试:

puts "Hello from Docker Ruby!"

保存为 test.rb,然后执行:

ruby test.rb

如果看到 Hello from Docker Ruby!,说明环境已正常工作。

避坑指南:新手最容易踩的四个坑

1. 权限问题导致无法写入文件

如果宿主机目录没有写入权限,容器内生成的 Gem 安装文件会报错。建议在宿主机先给目录设置 755 权限

chmod -R 755 /home/myapp

2. 容器退出后代码丢失

使用 --rm 标志时,容器一旦退出,里面所有的改动都会消失。如果需要持久化 Gem 缓存,建议挂载一个 volume

docker run -it --rm -v "$PWD":/app -v rubygems:/usr/local/bundle -w /app ruby:3.3 bash

这样 .gem 缓存在 volume rubygems 中,不会被删除。

3. 端口映射没写导致外部无法访问(Web 应用)

如果你的 Ruby 应用要开启 Web 服务(比如 Sinatra),启动容器时需要加端口映射:

docker run -it --rm -p 4567:4567 -v "$PWD":/app -w /app ruby:3.3 ruby app.rb

4. 镜像版本与代码冲突

有些旧项目需要特定的 Ruby 版本,拉取镜像时请根据项目 Gemfile.ruby-version 文件确定版本。
例如:

docker pull ruby:2.7.8

高频问题解答

Q:每次都要打这么长的命令吗?
A:可以把常用参数写进 Dockerfiledocker-compose.yml。对于 Docker 部署 Ruby,推荐用 docker-compose,保存为 docker-compose.yml

version: '3'
services:
  ruby:
    image: ruby:3.3
    container_name: myruby
    volumes:
      - .:/app
    working_dir: /app
    stdin_open: true
    tty: true

然后运行 docker-compose up -ddocker-compose exec ruby bash 即可。

Q:容器内安装 Gem 后怎么持久化?
A:参考避坑第二条,挂载 volume rubygems:/usr/local/bundle。或者把 Gem 安装到项目目录下的 vendor/bundle(执行 bundle config set path 'vendor/bundle'),挂载代码目录即可。

效果验证

完成以上步骤后,你已经在服务器上用 Docker 成功运行了一个 Ruby 环境。
可以创建一个包含第三方 Gem 的脚本测试,比如安装 sinatra

gem install sinatra

如果安装成功且没有报错,说明网络和依赖都正常。
至此,Docker 部署 Ruby 的完整流程就走通了,后续你可以基于这个基础容器进行开发或部署。

如果你在处理 Docker 部署 Ruby 时遇到其他异常,建议先回看避坑部分,特别是权限和镜像版本这两个最常见问题。
根据我的经验,80% 的新手报错都能在这两部分找到答案。

分享到:
上一篇
Linux服务器网络延迟优化:从诊断到调优的完整教程
下一篇
服务器邮件服务器优化:从配置到防垃圾邮件全攻略
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意