Dockerfileの作成
-# ビルドコンテキスト
% mkdir product-register
% cd product-register
-# GemfileとGemfile.lockの作成
% touch Gemfile Gemfile.lock
-# Gemfileの編集
% vim Gemfile
product-register/Gemfile
source 'https://rubygems.org'
gem 'rails', '~>5.2'
-# Dockerfileの編集
% vim Dockerfile
product-register/Dockerfile
FROM ruby:2.5
RUN apt-get update && apt-get install -y && \
buile-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
WORKDIR /product-register
COPY Gemfile Gemfile.lock /product-register/
RUN bundle install
-# コンテナの作成
% docker build .
##docker-compose.ymlの記述
-# docker-compose.ymlの編集
% vim docker-compose.yml
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/product-register'
tty: true
stdin_open: true
-# コンテナの立ち上げ
% docker-compose up -d
-# コンテナ内に入って作業をする場合
% docker-compose exec web bash
##Railsのセットアップ
-# アプリの作成、DBの設定、bundleはDockerfileで行うので—skip
# rails new . —force —database=postgresql —skip-bundle
-# ホスト側でGemfileの内容が変わっていることを確認する
% cat Gemfile
-# bundle installする必要があるので一度停止する
# exit
$ docker-compose down
-# docker-compose upをすると前のイメージが使われるので再度buildを行う
$ docker-compose up —build -d
% docker-compose exec web bash
-# railsのサーバを起動
$ rails s -b 0.0.0.0
localhost:3000で接続できるがDBの設定を行っていないのでエラーページとなる。
##DBのセットアップ
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
Passwordはセキュリティ的に直接書くのは望ましくないので環境変数で呼び出すようにする。
##docker-compose.ymlの変更
docker-compose.yml
version: '3'
# dockervolumeここにデータが保存される
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/product-register'
# コンテナの環境変数設定、本来は直接パスワードを書いてはいけない。
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
# dbサービスが作られたら作成される
depends_on:
- db
# webからdbにアクセスできる
links:
- db
# postgresのコンテナ
db:
image: postgres
# ホストのdb-dataにデータを保管
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
##docker-composeで起動
% docker-compose up -d
-# 2つのサービスが起動しているのが確認できる
Creating product-register_db_1 ... done
Recreating product-register_web_1 ... done
% docker-compose exec web bash
-# DBの作成
# rails db:create
Created database 'product-register_development'
Created database 'product-register_test'
データベースが作られているのが確認できる。
ここからRailsのアプリを作成することができる。
##アプリを作り動作を確認する
-# scaffoldで簡単なアプリを作る
# rails g scaffold product name:string price:integer vender:string
-# 作成したテーブルを定義する
# rails db:migrate
-# サーバを立ち上げる
# rails s -b 0.0.0.0
localhost:3000で接続でき、railsのページが表示されていることが確認できる。
localhost:3000/productsで作られたアプリに接続できる。