Logo
Section 1 / 6

我们的 Rails 应用是如何运行的?

找到构建我们 Rails 应用的最佳选项。

导入

我们的 Rails 应用是如何运行的?

找到构建我们 Rails 应用的最佳选项。

运行我们的 Rails 应用程序的方法

很遗憾,我们无法仅使用 ruby:2.7 镜像来启动 Rails 服务器。Rails 还有一些其他需求,例如 JavaScript 解释器(Node.js),以帮助处理资产管道和 gem 依赖项。一种方法是在基于 ruby:2.7 镜像的容器中运行 Bash,并从那里安装所需内容。然而,手动运行命令难以重复。

另一种获取容器的方式是通过运行 Rails,将安装 Rails 所需的一系列命令串联成一个很长的复合 docker run 命令。复合 docker run 允许你通过使用 bash 命令的 -c 选项,在 docker run 中启动容器并运行单个命令。-c 选项会启动一个 Bash shell 并立即执行你作为字符串传递的内容。这使你可以做到以下操作:

1$ docker run <options> [image:version] \ 2bash -c "command1 && command2 && command3..."

然而,不仅这个命令会非常庞大、难看且难以记忆,最糟糕的是,它会很慢。每次都需要从头开始运行设置指令,包括重新安装 Node.js 或 gem 依赖项。我们不希望仅仅为了启动一个 Rails 服务器就等待几分钟。

那么真正的解决方案是什么?

我们希望可以基于一个预先配置好的状态运行容器,该状态包含了运行 Rails 所需的一切。我们真正需要的其实是一个创建这些完美 Rails 服务器容器的 工厂。而构建镜像正是满足我们需求的完美方案。

...
Docker Images

Dockerfile

工厂必须由蓝图构建而成,这些蓝图是详细计划和说明,精确描述了它应该长什么样子。Docker 的容器工厂——镜像也是一样。它们需要一个名为 Dockerfile 的特殊蓝图文件。Dockerfile 使用一种特殊语法来精确描述镜像应该如何构建。如果你听说过“基础设施即代码”这一表达,这就是一个例子。Dockerfile 描述了机器镜像的配置方式,如下所示:

...
Dockerfiles, Images and Containers

添加数据库:Postgres

Dockerfile 创建与说明