如何使用 Docker Compose 构建 Ruby on Rails 应用程序

阅读时长 5 分钟读完

概述

Docker 是一款强大的虚拟化工具,它可以将应用程序及其依赖项(例如数据库、缓存服务器等)打包在一个容器中,消除了运行环境的差异和依赖冲突的问题。使用 Docker Compose 则可以通过一个 YAML 文件定义和配置多个 Docker 容器,实现对整个应用程序环境的管理和部署。

本文将介绍如何使用 Docker Compose 构建 Ruby on Rails 应用程序,并包含完整的示例代码。

环境准备

在开始之前,您需要先安装 Docker 和 Docker Compose 工具。具体安装方法可以参考官方文档:

另外,为了创建 Ruby on Rails 应用程序,您需要安装 Ruby 和 Rails 环境。具体的安装方法可以参考官方文档:

创建 Docker Compose 文件

我们可以通过以下命令创建一个名为 docker-compose.yml 的 YAML 文件:

-- -------------------- ---- -------
-------- -----
---------
  ----
    ------ -
    ------
      - -----------
    --------
      - ------
    -----------
      - --
  ---
    ------ -------------
    ------------
      -------------- --------
      ------------------ -------
      ------------ -----------------
    --------
      - --------------------------------
--------
  --------

在这个文件中,我们定义了两个服务:web 和 db。其中,web 服务用于运行 Rails 应用程序,db 服务用于运行 PostgreSQL 数据库。我们在 web 服务中指定了以下配置:

  • build: . 表示使用当前目录下的 Dockerfile 文件构建镜像。
  • ports: 表示将容器内的 3000 端口映射到宿主机的 3000 端口。
  • volumes: 表示将当前目录挂载到容器内的 /app 目录下。
  • depends_on: 表示 web 服务依赖于 db 服务。

在 db 服务中,我们使用了官方的 PostgreSQL 13.4 镜像,并指定了以下环境变量:

  • POSTGRES_USER: postgres 表示创建一个名为 postgres 的超级用户。
  • POSTGRES_PASSWORD: example 表示为超级用户设置密码为 example。
  • POSTGRES_DB: myapp_development 表示创建一个名为 myapp_development 的数据库。

我们还为 db 服务挂载了一个名为 db_data 的卷,用于保存数据库文件。

创建 Dockerfile 文件

除了 docker-compose.yml 文件以外,我们还需要为应用程序创建一个名为 Dockerfile 的文件,该文件定义了如何在容器内构建应用程序。

-- -------------------- ---- -------
---- ----------
--- ------- ------ -- ------- ------- -- --------------- ---------
--- ----- ----
------- ----
---- ------- ------------
---- ------------ -----------------
--- ------ -------
---- - ----
--- ----- ----------
--- --------- --------- ----- ----------

在这个 Dockerfile 文件中,我们从 Ruby 3.0.2 镜像中创建了一个新的容器。接着,我们安装了 build-essential 和 libpq-dev 包,用于编译 C 扩展和连接 PostgreSQL 数据库。

然后,我们在 /app 目录下创建一个新目录并将其设为工作目录。接着,我们将 Gemfile 和 Gemfile.lock 文件复制到容器内。在容器内执行 bundle install 安装所有的 Rails 依赖。

最后,我们复制整个应用程序目录到容器内,并执行数据库迁移。终端处于 server 模式,向外界提供服务。

运行应用程序

在完成 Docker Compose 和 Dockerfile 的编写后,我们可以使用以下命令构建和启动应用程序:

该命令会将 docker-compose.yml 文件和 Dockerfile 文件组合起来,然后执行以下操作:

  • 使用 Dockerfile 文件构建 web 服务的镜像。
  • 使用 postgres:13.4 镜像创建 db 服务的容器。
  • 启动 db 服务的容器,并将其命名为 myapp_db_1。
  • 启动 web 服务的容器,并将其命名为 myapp_web_1。
  • 将容器内的 3000 端口映射到宿主机的 3000 端口。

在启动过程中,您将看到 Rails 应用程序的输出信息。如果您使用浏览器访问 http://localhost:3000,则会看到 Rails 应用程序的欢迎页面。

当您需要停止应用程序时,可以使用以下命令:

该命令将停止所有正在运行的容器,并删除相关的镜像和卷。

总结

本文介绍了如何使用 Docker Compose 和 Dockerfile 编写和部署 Ruby on Rails 应用程序。如果您刚刚接触 Docker 和 Ruby on Rails,则可以将此文章作为入门指南。如果您已经熟悉 Docker 和 Ruby on Rails,则可以使用此文章作为参考,了解如何更好地管理和部署应用程序环境。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646d8f5e968c7c53b0c37c9b

纠错
反馈