使用 Docker 构建基于 Ruby on Rails 框架的应用

在现代 Web 开发中,Docker 已经成为了一种非常流行的工具。它可以帮助我们快速构建、部署和管理应用程序,同时也可以提高开发和部署的效率。在本文中,我们将介绍如何使用 Docker 构建基于 Ruby on Rails 框架的应用程序。

准备工作

在开始之前,需要确保已经安装了 Docker 和 Docker Compose。如果没有安装,可以参考 Docker 官方文档进行安装。

创建项目

首先,我们需要创建一个 Ruby on Rails 项目。在终端中执行以下命令:

这个命令会在当前目录下创建一个新的 Ruby on Rails 项目,并且使用 PostgreSQL 作为数据库。

修改配置

接下来,我们需要修改一些配置文件。打开 config/database.yml 文件,将其中的 hostusernamepassword 修改为以下内容:

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

这里的 host 设置为 db,是因为我们将使用 Docker Compose 来启动一个 PostgreSQL 容器,并将其命名为 db。在 Docker Compose 中,可以使用服务名来访问其他容器。

编写 Dockerfile

接下来,我们需要编写一个 Dockerfile,用于构建我们的应用程序镜像。在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

FROM ruby:2.6.3

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

WORKDIR /app

COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install --jobs 20 --retry 5

COPY . .

EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

这个 Dockerfile 中定义了一个基于 Ruby 2.6.3 的镜像,安装了 Node.js 和 PostgreSQL 客户端。然后将工作目录设置为 /app,并将 Gemfile 和 Gemfile.lock 复制到容器中。接着运行 bundle install 安装所需的依赖。最后,将整个项目复制到容器中,并将端口号设置为 3000,启动 Rails 服务器。

编写 docker-compose.yml

现在我们需要编写一个 Docker Compose 文件,用于启动我们的应用程序和数据库容器。在项目根目录下创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3'
services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  db-data:

这个文件中定义了两个服务:dbwebdb 服务使用官方提供的 PostgreSQL 镜像,并设置了用户名和密码。同时将数据卷挂载到 /var/lib/postgresql/data 目录下,用于持久化存储数据库数据。

web 服务则使用了我们刚刚编写的 Dockerfile,将应用程序构建为一个镜像。然后将整个项目挂载到容器中,以便进行开发和调试。同时将端口号映射到主机上的 3000 端口,便于在浏览器中访问。最后,将 web 服务依赖于 db 服务,以确保数据库容器在应用程序容器之前启动。

启动应用程序

现在可以使用 Docker Compose 启动我们的应用程序了。在终端中执行以下命令:

这个命令会启动所有定义在 docker-compose.yml 文件中的服务。在启动完成之后,可以在浏览器中访问 http://localhost:3000,看到 Ruby on Rails 的欢迎页面。

总结

本文介绍了如何使用 Docker 构建基于 Ruby on Rails 框架的应用程序。通过使用 Docker,我们可以快速构建和部署应用程序,并且可以方便地进行开发和调试。希望本文对大家有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c5d4bbadd4f0e0ff05ceda