Linux入门教程:快速入门: Compose和Rails,运维日志 定义项目 定义用来


本快速入门指南介绍如何使用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 'https://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端口。

相关内容