如何在 Docker上部署一个 Rails 应用

[摘要] Docker 官方镜像库已经提供了各种web应用而创建的Docker image,直接拿下来使用即可。如果自己创建Docker image的话,可以使用Docker的building tools来创建你的Docker容器,也可以通过Onbuild的命令行方式来创建Dockerfiles,而且这种使用更加纯粹的Dockerfiles方式会带给你更多的益处:

1. 你能够更多使用代码的方式控制和定义Docker镜像,即便你对操作系统本身不感冒,你仍然可以通过编辑Dockerfiles的方式来定制你的操作系统。
2. Docker内部标签提供了不同的语言或者框架版本,这样你将更容易的选则各种版本。
3. 如果你使用标准的Docker,你将会从Docker社区支持和贡献中获取更多的好处。

书归正传,现在我们就实战一下,看看如何在Docker中创建一个Rails应用:
#创建一个新的Rails app

$ rails new foobar
$ cd foobar
$ echo 'FROM rails:onbuild' > Dockerfile
$ docker build -t my-rails-app .
$ docker run -d -p 3000:3000 my-rails-app
$ curl 0.0.0.0:3000
<!DOCTYPE html>
<html>
  <head>
    <title>Ruby on Rails: Welcome aboard</title>
    …

如果不知道这个是用来做什么的? 可以先看看rails:onbuild Dockerfile:

FROM ruby:2.1.5

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ONBUILD COPY Gemfile /usr/src/app/
ONBUILD COPY Gemfile.lock /usr/src/app/
ONBUILD RUN bundle install

ONBUILD COPY . /usr/src/app

RUN apt-get update && \
  apt-get install -y nodejs --no-install-recommends && \
  rm -rf /var/lib/apt/lists/*
RUN apt-get update && \
  apt-get install -y \
    mysql-client postgresql-client \
    sqlite3 --no-install-recommends && \
  rm -rf /var/lib/apt/lists/*

EXPOSE 3000
CMD ["rails", "server"]

现在看上去就非常清晰明了:Ruby的版本,源文件所在的位置和应用是如何运行的。

如果你是用Mac系统,你需要Gemfile.lock文件来关联Linux库的版本,这有一个很简单的命令:

$ docker run --rm -v "$(pwd)":/usr/src/app -w /usr/src/app ruby:2.1.5 bundle install

这样启动一个包含一个关联你本地文件的文件系统的临时容器,所以Gemfile.lock文件被创建后将会被写到你本地的文件系统里面,而并不仅仅是写到了容器的文件系统中!

为什么使用Onbuild方式要比building tools更好? 我想其中一点就是定制化更容易些。例如你想让你的Rails应用使用thin server而不是webrick,你仅需要在你app的Dockerfile里面增加thin gem替换即可,如:

$ echo 'CMD ["thin", "start"]' >> Dockerfile
$ docker build -t my-rails-app .

总之,Docker的这种灵活性是最讨人喜欢的。
原文:how to deploy a rails app to docker

u2

Related Posts

rancher v2.x 初体验

rancher v2x

sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached

Python3 + Flask + mysql5.7搭建的w…

You Missed

潘多拉魔盒已打开:开源AI攻击平台正在血洗全球防火墙

  • u2
  • 3月 4, 2026
  • 25 views
潘多拉魔盒已打开:开源AI攻击平台正在血洗全球防火墙

雇佣AI员工,花钱上班:开发者的新”职场”荒诞剧

  • u2
  • 3月 1, 2026
  • 47 views
雇佣AI员工,花钱上班:开发者的新”职场”荒诞剧

OpenClaw 完整使用指南:自托管 AI Agent 的架构与实战

  • u2
  • 2月 25, 2026
  • 163 views
OpenClaw 完整使用指南:自托管 AI Agent 的架构与实战

Anthropic 推出 Claude Code Security:AI 驱动的代码安全神器

  • u2
  • 2月 24, 2026
  • 87 views

来自 OWASP 的代码安全检查工具:Dependency-Check,为你消除安全隐患

  • u2
  • 10月 16, 2025
  • 54 views
来自 OWASP 的代码安全检查工具:Dependency-Check,为你消除安全隐患

技术宅如何躲开越来越垃圾的CSDN?

  • u2
  • 4月 11, 2024
  • 45 views
技术宅如何躲开越来越垃圾的CSDN?