在 Ubuntu 上使用 Docker 和 Docker Compose 设置 Ruby on Rails 开发环境
在此页
- 第 1 步 - 安装 Docker 和 Docker Compose
- 第 2 步 - 生成 Ruby on Rails 项目
- 第 3 步 - 设置 Rails 项目
- 第 4 步 - 创建 Docker 组合文件
- 第 5 步 - 构建项目
- 第 6 步 - 测试在 Rails 上创建基本 CRUD
- 参考资料
Docker 是一个开源项目,它为开发人员和系统管理员提供了一个开放平台,可以作为轻量级容器在任何地方构建、打包和运行应用程序。 Docker 自动在软件容器内部署应用程序。
Ruby on Rails (RoR) 是一个开源 Web 应用程序框架,在 MIT 许可证下发布。它是一个遵循 MVC(模型-视图-控制器)概念的服务器端 Web 应用程序框架。
在本教程中,我将向您展示如何使用 Docker 和 Docker Compose 为 Ruby on Rails 应用程序设置开发环境。我们将使用 Ubuntu 18.04 作为主机操作系统,并为我们的 Rails 项目使用 PostgreSQL 数据库。
我们将要做什么:
- 安装 Docker 和 Docker Compose
- 生成 Rails 项目
- 设置 Rails 项目
- 创建 Docker Compose 脚本
- 构建项目
- 测试在 Rails 上创建基本的 CRUD
第 1 步 - 安装 Docker 和 Docker Compose
我们必须做的第一步是安装 docker 和 docker compose 本身。我们将从官方 docker 存储库安装 docker,并从官方 docker GitHub 项目安装 docker-compose。
在安装 Docker 包之前,运行下面的 apt 命令来安装包依赖项。
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
现在添加 docker 密钥和 docker 存储库。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
该命令将自动更新系统上的所有存储库。完成后,安装 docker-ce 包。
sudo apt install -y docker-ce
等待docker-ce安装完成,然后启动docker服务,加入开机时间。
sudo systemctl start docker
sudo systemctl enable docker
Docker 在系统上启动并运行。
接下来,通过直接从 docker GitHub 存储库下载二进制文件来安装 docker-compose。
将 docker-compose 二进制文件下载到 /usr/local/bin/ 目录并使其成为可执行文件。
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker 和 docker-compose 已经安装到系统中,使用下面的命令检查版本。
docker version
docker-compose version
下面是结果。

第 2 步 - 生成 Ruby on Rails 项目
将核心包 docker 和 docker-compose 安装到系统后,我们要创建一个新用户,然后使用 docker 镜像生成 Rails 项目。
添加名为 hakase 的用户并为该用户提供密码。
useradd -m -s /bin/bash hakase
passwd hakase
将用户添加到 sudo 和 docker 组并登录到 hakase 用户 shell。
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
现在 hakase 用户可以执行和运行 docker 命令。
接下来,我们将为我们的 Ruby on Rails 项目创建一个新的目录 rails。
创建 rails 目录并转到它。
mkdir -p ~/rails
cd ~/rails/
现在执行下面的 docker run 命令。
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
该命令会运行基于ruby:alpine镜像的临时容器,将本地目录挂载到容器内部的/usr/src目录下,然后执行sh shell命令,进入app目录。

在容器内,安装构建基础包。
apk add build-base
现在在临时容器中安装 Ruby on Rails。
gem install -N rails
并以 PostgreSQL 作为数据库生成名为 app 的新 Rails 项目,然后退出/注销容器。
rails new app --database=postgresql --skip-bundle
exit
并且你将在 Rails 项目目录 app 上。
现在将app项目目录的所有者修改为hakase用户。
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
并且Ruby on Rails项目已经通过临时docker容器生成。

第 3 步 - 设置 Rails 项目
在此步骤中,我们将为 Rails 应用程序创建一个新的 Dockerfile。
在 rails 目录中,使用 vim 创建一个新的 Dockerfile。
vim Dockerfile
下面粘贴配置。
FROM ruby:alpine
RUN apk update
RUN apk add build-base nodejs postgresql-dev tzdata
RUN gem install -N rails
RUN mkdir -p /app
WORKDIR /app
COPY ./app/Gemfile /app
COPY ./app/Gemfile.lock /app
RUN bundle install --binstubs
保存并退出。
我们正在创建一个基于 Ruby Alpine linux 的新 docker 镜像。我们正在为 rails 安装安装新的包,创建一个新的 /app 目录,从应用程序本地目录复制 Gemfile 和 Gemfile.lock,然后根据 Gemfile 安装所有包。
接下来,转到应用程序目录,创建一个新文件 Gemfile.lock。
cd app/
touch Gemfile.lock
编辑 database.yml 文件。
vim config/database.yml
更改默认数据库配置并更改详细信息,如下所示。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
保存并退出。

Rails 项目配置已经完成。
第 4 步 - 创建 Docker Compose 文件
在此步骤中,我们将为 Rails 应用程序创建一个新的 docker-compose 文件。我们只会创建两个服务 db 数据库 PostgreSQL 和 web 是 rails 应用程序本身。
在 rails 目录中创建一个新文件 docker-compose.yml。
vim docker-compose.yml
并在下面粘贴配置。
version: '3.6'
services:
db:
image: postgres:alpine
volumes:
- ./postgresql:/var/lib/postgresql/data
web:
build: .
volumes:
- ./app:/app
working_dir: /app
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- 80:3000
depends_on:
- db
保存并退出。

现在在 rails 项目中创建 postgresql 目录。
mkdir -p ~/rails/postgresql
并准备好构建我们的 Rails 项目。
第 5 步 - 构建项目
使用下面的 docker-compose 命令构建 Rails docker 镜像。
docker-compose build
该命令将下载 Ruby Alpine Linux 镜像,并根据我们的 Dockerfile 构建我们需要的自定义镜像。

为项目生成 PostgreSQL 数据库。
docker-compose run web rake db:create

现在启动数据库和网络服务。
docker-compose up -d
rails 服务已启动并正在运行,使用下面的 docker-compose 命令检查它。
docker-compose ps
您可以看到服务 Web 正在主机上的端口 80 上运行。
现在检查我们系统上的 docker 镜像。
docker-compose images
你会得到如下结果。

现在打开您的网络浏览器并输入服务器 IP 地址或域名。我的是:
http://rails.hakase-labs.io/
您将获得默认的 Rails 页面应用程序。

现在准备开发我们的 Rails 项目。
第 6 步 - 测试在 Rails 上创建基本 CRUD
通过在 Web 容器服务中运行 rails 命令,在 Rails 上生成简单的 CRUD。
docker-compose exec web rails g scaffold Post title:string body:text
现在生成数据库。
docker-compose exec web rake db:migrate

现在打开您的网络浏览器并在地址栏中输入服务器 IP 地址和路径 /posts。我的是:
http://rails.hakase-labs.io/posts
您将获得如下所示的简单 CRUD 页面。

键入帖子并单击创建帖子按钮。
你会得到如下结果。

使用 Docker 和 Docker Compose 的 Ruby on Rails 开发环境设置已成功完成。
参考
- https://docs.docker.com/