牛下载:绿色软件官方软件免费下载基地!
所在位置:首页 > 新闻资讯 > 快速入门: Compose和Rails

快速入门: Compose和Rails

发布时间:2020-07-02 17:16:40来源:阅读:

本快速入门指南介绍如何使用docker compose配置和运行一个Rails/PostgreSQL app。

定义项目

定义用来构建app的三个文件。首先由于app是运行在包含它的所有依赖的容器内,你需要定义哪些文件需要包括在容器内。这个可以使用Dockerfile来完成。这个Dockerfile包括:

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

上面把应用程序代码放到了镜像内,这个镜像将用来运行一个包含Ruby,Bundler和其所有的依赖的容器。

下一步,创建一个只加载Rails的bootstrap Gemfile文件。在后面将由rails new覆盖它。

source 'http://rubygems.org'
gem 'rails', '5.0.0.1'

需要一个空的Gemfile.lock文件,构建Dockerfile用到。

touch Gemfile.lock

最后,开始创建docker-compose.yml文件。这个文件描述了你的app由什么服务构建(数据库和web app),如何获取每一个的镜像以及需要链接它们到一起和暴露web app的端口的配置。

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

构建项目

准备好那三个文件后,就可以使用docker-compose run来生成Rails skeleton app了:

docker-compose run web rails new . --force --database=postgresql --skip-bundle

首先,compose使用Dockerfile构建web服务的镜像。然后使用那个镜像生成容器,在容器内运行rails new命令。一旦完成,将生成一个全新的app:

$ ls -l
  total 56
  -rw-r--r--   1 user  staff   215 Feb 13 23:33 Dockerfile
  -rw-r--r--   1 user  staff  1480 Feb 13 23:43 Gemfile
  -rw-r--r--   1 user  staff  2535 Feb 13 23:43 Gemfile.lock
  -rw-r--r--   1 root  root   478 Feb 13 23:43 README.rdoc
  -rw-r--r--   1 root  root   249 Feb 13 23:43 Rakefile
  drwxr-xr-x   8 root  root   272 Feb 13 23:43 app
  drwxr-xr-x   6 root  root   204 Feb 13 23:43 bin
  drwxr-xr-x  11 root  root   374 Feb 13 23:43 config
  -rw-r--r--   1 root  root   153 Feb 13 23:43 config.ru
  drwxr-xr-x   3 root  root   102 Feb 13 23:43 db
  -rw-r--r--   1 user  staff   161 Feb 13 23:35 docker-compose.yml
  drwxr-xr-x   4 root  root   136 Feb 13 23:43 lib
  drwxr-xr-x   3 root  root   102 Feb 13 23:43 log
  drwxr-xr-x   7 root  root   238 Feb 13 23:43 public
  drwxr-xr-x   9 root  root   306 Feb 13 23:43 test
  drwxr-xr-x   3 root  root   102 Feb 13 23:43 tmp
  drwxr-xr-x   3 root  root   102 Feb 13 23:43 vendor

如果这个时候或之后编辑了Gemfile,需要重新构建镜像。

docker-compose build

连接数据库

使用如何内容替换config/database.yml文件:

development: &default
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: postgres
  password:
  host: db
 
test:
  <<: *default
  database: myapp_test

开始启动app:

docker-compose up

如果一切正常,将会看到PostgrepSQL的输出,然后再过几秒钟,将看到

myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick 1.3.1
myapp_web_1 | [2014-01-17 17:16:29] INFO  ruby 2.2.0 (2014-12-25) [x86_64-linux-gnu]
myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick::HTTPServer#start: pid=1 port=3000

最后,在另一个终端创建一个数据库:

docker-compose run web rails db:create

现在app已经运行在主机的3000端口。
快速入门: Compose和Rails

反对
收藏
  • 热门资讯
  • 最新资讯
  • 应用排行榜
  • 游戏排行榜